70 lines
1.8 KiB
Text
70 lines
1.8 KiB
Text
|
|
global intmax = 2147483645;
|
||
|
|
global n = 9;
|
||
|
|
|
||
|
|
int minDistance(int[] dist, bool[] sptSet) {
|
||
|
|
var min = intmax;
|
||
|
|
var min_index = intmax;
|
||
|
|
for (var v = 0; v < n; v = v + 1;) {
|
||
|
|
if ((sptSet[v] == false) & (dist[v] <= min)) {
|
||
|
|
min = dist[v];
|
||
|
|
min_index = v;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return min_index;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
int[] dijkstra(int[][] adjGraph, int src) {
|
||
|
|
var dist = new int[n];
|
||
|
|
|
||
|
|
var sptSet = new bool[n];
|
||
|
|
|
||
|
|
for (var i = 0; i < n; i=i+1;) {
|
||
|
|
dist[i] = intmax;
|
||
|
|
sptSet[i] = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
dist[src] = 0;
|
||
|
|
|
||
|
|
for (var count = 0; count < n - 1; count = 1 + count;) {
|
||
|
|
|
||
|
|
var u = minDistance(dist, sptSet);
|
||
|
|
|
||
|
|
sptSet[u] = true;
|
||
|
|
|
||
|
|
for (var v = 0; v < n; v = v + 1;) {
|
||
|
|
if (!sptSet[v] & adjGraph[u][v] != 0 & (dist[u] != intmax)
|
||
|
|
& dist[u] + adjGraph[u][v] < dist[v]) {
|
||
|
|
dist[v] = dist[u] + adjGraph[u][v];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return dist;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
int program(int argc, string[] argv) {
|
||
|
|
var graph = new int[][] { new int[] { 0, 4, 0, 0, 0, 0, 0, 8, 0 },
|
||
|
|
new int[] { 4, 0, 8, 0, 0, 0, 0, 11, 0 },
|
||
|
|
new int[] { 0, 8, 0, 7, 0, 4, 0, 0, 2 },
|
||
|
|
new int[] { 0, 0, 7, 0, 9, 14, 0, 0, 0 },
|
||
|
|
new int[] { 0, 0, 0, 9, 0, 10, 0, 0, 0 },
|
||
|
|
new int[] { 0, 0, 4, 14, 10, 0, 2, 0, 0 },
|
||
|
|
new int[] { 0, 0, 0, 0, 0, 2, 0, 1, 6 },
|
||
|
|
new int[] { 8, 11, 0, 0, 0, 0, 1, 0, 7 },
|
||
|
|
new int[] { 0, 0, 2, 0, 0, 0, 6, 7, 0 } };
|
||
|
|
|
||
|
|
var output = dijkstra(graph, 0);
|
||
|
|
var dist = new int[] {0, 4, 12, 19, 21, 11, 9, 8, 14};
|
||
|
|
var success = true;
|
||
|
|
for (var i = 0; i< n; i = i+1;) {
|
||
|
|
success = success & (output[i] == dist[i]);
|
||
|
|
}
|
||
|
|
if (success) {
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
|