package ch.akuhn.graph;
import java.util.Arrays;
public class DijkstrasAlgorithm {
public static int[] apply(Graph g, int source) {
int[] dist = new int[g.nodes.length];
boolean[] done = new boolean[g.nodes.length];
Node[] todo = new Node[g.nodes.length];
Arrays.fill(dist, Integer.MAX_VALUE);
int index = 0;
todo[index++] = g.nodes[source];
done[source] = true;
dist[source] = 0;
for (int n = 0; n < todo.length; n++) {
Node node = todo[n];
if (node == null) break;
int d = dist[node.index] + 1;
for (Node each: node.edges) {
if (done[each.index]) continue;
todo[index++] = each;
dist[each.index] = d;
done[each.index] = true;
}
}
return dist;
}
public static int[][] apply(Graph g) {
int[][] dist = new int[g.nodes.length][];
for (int i = 0; i < dist.length; i++) dist[i] = apply(g, i);
return dist;
}
}