HTX Frederikshavn & Hjørring

Det har aldrig været sjovere at være nørd

Brugerværktøjer

Webstedsværktøjer


prog:forloeb:dijkstra_2_csharp

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:

  1. Initialiser data — opret arrays til afstande (`distances`) og besøgte noder (`visited`).
  2. Find næste node — find den ubesøgte node med den korteste kendte afstand.
  3. Opdater afstande — gennemgå alle naboer til den valgte node, og opdater afstande, hvis der findes en kortere sti via den node.
  4. Gentag — indtil alle noder er besøgt eller ingen nye noder kan nås.
  5. 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

FindMinDistance

RunDijkstra

PrintResults

prog/forloeb/dijkstra_2_csharp.txt · Sidst ændret: af 127.0.0.1