Floyd-Warshall アルゴリズムを使用して、2 つの頂点間の最短経路を見つけたいと考えています。マトリックスは 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;
}