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 };
I skal implementere Dijkstra’s algoritme med følgende trin:
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 } }