我想使用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;
}
答案 0 :(得分:0)
试试这个:
shortest.get(j).add(i, Math.min(shortest.get(i).get(k) + shortest.get(k).get(j),
shortest.get(i).get(j)));
或使用Dijkstra的算法