CS153/hw6/hw4programs/sp22_tests/dijkstras.oat

70 lines
1.8 KiB
Text
Raw Normal View History

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;
}