Floyd-Warshall算法实现与列表列表

时间:2015-08-25 16:02:45

标签: java algorithm matrix floyd-warshall

我想使用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;
    }

1 个答案:

答案 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的算法