我想使用 Floyd-Warshall 算法来找到两个顶点之间的最短路径。该矩阵位于 ArrayList<ArrayList<Integer>> 中。它总是相当小,例如 4x4 或 8x8 矩阵。
在我的课堂上,我已经有一个距离矩阵。我只是想创建“最短路径”矩阵。但它不起作用。它错误地填充了我的矩阵。
我真的希望有人可以看看这个并解释什么是错的。
我的距离矩阵是:
0 0 256 411
556 0 558 0
250 0 0 431
0 0 431 0
测试输出为:
0 0 0 0
556 556 556 556
250 250 250 250
0 0 0 0
预期的:
500 0 842 681
556 0 806 967
0 0 500 681
581 0 0 862
我已经注释掉了我的测试输出。distance
是我的矩阵,具有顶点之间距离的整数值。在我的矩阵中,i
是 y 并且j
是 x。
public ArrayList<ArrayList<Integer>> calcShortest() {
//String test = "";
ArrayList<ArrayList<Integer>> shortest = distance;
for (int k = 0; k < airports.size(); k++) {
for (int i = 0; i < airports.size(); i++) {
for (int j = 0; j < airports.size(); j++) {
shortest.get(j).add(i, Math.min(shortest.get(k).get(i) + shortest.get(j).get(k),
shortest.get(j).get(i)));
}
}
}
/*for (int j = 0; j < airports.size(); j++) {
for (int i = 0; i < airports.size(); i++) {
test += shortest.get(j).get(i) + " ";
}
System.out.println(test);
test = "";
}*/
return shortest;
}