My code runs Dijkstra's algorithm on an adjacency matrix which currently outputs the distance from the given source node to every other node in the graph. However, I am trying to now make it output the route that the algorithm has taken for each result but I'm not sure how I would go about this?
I may also change the code to instead only output the desired route as well instead of all the combinations to make the code a bit more efficient.
using System;
namespace Dijkstra
{
class Program
{
static void Main(string[] args)
{
int[,] graph = {
//A B C D E F G H I J K
{ 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, //A
{ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, //B
{ 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 }, //C
{ 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0 }, //D
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, //E
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 }, //F
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 }, //G
{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, //H
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, //I
{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, //J
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } //K
};
Dijkstra(graph, 0, 11);
}
private static int MinimumDistance(int[] distance, bool[] shortestPathTreeSet, int verticesCount)
{
int min = int.MaxValue;
int minIndex = 0;
for (int v = 0; v < verticesCount; ++v)
{
if (shortestPathTreeSet[v] == false && distance[v] <= min)
{
min = distance[v];
minIndex = v;
}
}
return minIndex;
}
private static void Print(int[] distance, int verticesCount)
{
Console.WriteLine("Vertex Distance from source");
for (int i = 0; i < verticesCount; ++i)
Console.WriteLine("{0}\t {1}", i, distance[i]);
}
public static void Dijkstra(int[,] graph, int source, int verticesCount)
{
int[] distance = new int[verticesCount]; // Integer array, size of number of verticies
bool[] shortestPathTreeSet = new bool[verticesCount]; // boolean array size of number of verticies
for (int i = 0; i < verticesCount; ++i) // For every verticy, set the verticy distance to infinite (max int value)
{
distance[i] = int.MaxValue;
shortestPathTreeSet[i] = false;
}
distance[source] = 0; // Distance of source verticie is 0
for (int count = 0; count < verticesCount - 1; ++count)
{
int u = MinimumDistance(distance, shortestPathTreeSet, verticesCount);
shortestPathTreeSet[u] = true;
for (int v = 0; v < verticesCount; ++v)
if (!shortestPathTreeSet[v] && Convert.ToBoolean(graph[u, v]) && distance[u] != int.MaxValue && distance[u] + graph[u, v] < distance[v])
distance[v] = distance[u] + graph[u, v];
}
Print(distance, verticesCount);
}
}
}