static double[] dijkstra(int enter, int exit, double[,] g)
bool[,] graphVisited = new bool[g.GetLength(0), g.GetLength(1)];
double[] pathsLength = new double[g.GetLength(0)];
for (int ii = 0; ii < pathsLength.GetLength(0); ii++) {
string[] paths = new String[g.GetLength(0)];
paths[enter] = "" + enter;
pathFinder(-1, enter, g, graphVisited, pathsLength, paths);
String[] a = paths[exit].Split('>');
return a.Select(double.Parse).ToArray();
static void pathFinder(int prevNode, int currentNode, double[,] g, bool[,] gVisited, double[] pathsLength, String[] paths)
for (int ii = 0; ii < g.GetLength(0); ii++) {
neighbours = findNeighbours(g, currentNode);
gVisited[prevNode, currentNode] = true;
for (int jj = 0; jj < neighbours.Length; jj++) {
pathMark(currentNode, pathsLength, paths, neighbours[jj], g);
for (int jj = 0; jj < neighbours.Length; jj++) {
if (neighbours[jj] != prevNode && !gVisited[currentNode, neighbours[jj]]) {
pathFinder(currentNode, neighbours[jj], g, gVisited, pathsLength, paths);
static int[] findNeighbours(double[,] g, int node)
int length = g.GetLength(0);
for (int ii = 0; ii < length; ii++) {
if (neighboursCount == 0) {
int[] neighbours = new int[neighboursCount];
for (int ii = 0, jj = 0; ii < length; ii++) {
static void pathMark(int currentNode, double[] pathsLength, String[] paths, int nextNode, double[,] g)
if (pathsLength[nextNode] == -1) {
pathsLength[nextNode] = pathsLength[currentNode] + g[currentNode, nextNode];
paths[nextNode] = paths[currentNode] + ">" + nextNode;
if (pathsLength[nextNode] > (pathsLength[currentNode] + g[currentNode, nextNode])) {
pathsLength[nextNode] = pathsLength[currentNode] + g[currentNode, nextNode];
paths[nextNode] = paths[currentNode] + ">" + nextNode;
public static void Main()
Console.WriteLine("Hello World");