===== Opgave: Implementer Dijkstra’s algoritme i C# med en adjacency matrix ===== **Formål:** Lær at arbejde med grafer repræsenteret som adjacency matrix, og implementer Dijkstra’s algoritme til at finde korteste afstande fra en startnode til alle andre noder i grafen. **Grafen:** Brug nedenstående matrix som testgraf (værdien `int.MaxValue` repræsenterer ingen direkte forbindelse): const int INF = int.MaxValue; int[,] graph = { // A B C D E { 0, 6, INF, 1, INF}, // A { 6, 0, 5, 2, 2}, // B {INF, 5, 0, INF, 5}, // C { 1, 2, INF, 0, 1}, // D {INF, 2, 5, 1, 0} // E }; Matrice fra Analog Dijkstra opgave: int INF = int.MaxValue; int[,] graph = { // A B C D E F { 0, 4, 2, INF, INF, INF}, // A { 4, 0, 1, 5, INF, INF}, // B { 2, 1, 0, 8, 10, INF}, // C {INF, 5, 8, 0, 2, 6 }, // D {INF, INF, 10, 2, 0, 2 }, // E {INF, INF, INF, 6, 2, 0 }, // F }; ---- === Opgavebeskrivelse === I skal implementere Dijkstra’s algoritme med følgende trin: - **Initialiser data** — opret arrays til afstande (`distances`) og besøgte noder (`visited`). - **Find næste node** — find den ubesøgte node med den korteste kendte afstand. - **Opdater afstande** — gennemgå alle naboer til den valgte node, og opdater afstande, hvis der findes en kortere sti via den node. - **Gentag** — indtil alle noder er besøgt eller ingen nye noder kan nås. - **Udskriv resultatet** — vis korteste afstande fra startnode til alle andre. ---- === Funktionsskabeloner (uden implementering) === class Dijkstra { const int INF = int.MaxValue; int nodeCount; int[,] graph; int[] distances; bool[] visited; public Dijkstra(int[,] graph) { this.graph = graph; nodeCount = graph.GetLength(0); distances = new int[nodeCount]; visited = new bool[nodeCount]; } public void InitSearch(int start) { // TODO: Initialiser distances og visited arrays } public int FindMinDistance() { // TODO: Find ubesøgt node med mindste distance og returner dens indeks return -1; // Placeholder } public void RunDijkstra(int start) { // TODO: Implementer hovedløkken for Dijkstra’s algoritme } public void PrintResults(int start) { // TODO: Udskriv korteste afstande fra startnode til alle andre } } ---- === Hint i pseudokode === ++++ InitSearch | Initialiser distances til INF for alle noder Sæt distances[start] til 0 Initialiser visited til false for alle noder ++++ ++++ FindMinDistance | Sæt min til INF Sæt minIndex til -1 For hver node v: Hvis visited[v] == false og distances[v] <= min: min = distances[v] minIndex = v Returner minIndex ++++ ++++ RunDijkstra | Kald InitSearch(start) Gentag for nodeCount gange: u = FindMinDistance() Hvis u == -1: Stop løkken visited[u] = true For hver node v: Hvis visited[v] == false og der findes kant mellem u og v: Hvis distances[u] + graph[u,v] < distances[v]: distances[v] = distances[u] + graph[u,v] ++++ ++++ PrintResults | Skriv "Korteste afstande fra node " + NodeName(start) + ":" For hver node v: Hvis distances[v] == INF: distStr = "∞" Ellers: distStr = distances[v].ToString() Skriv NodeName(start) + " → " + NodeName(v) + ": " + distStr ++++