我正在努力完成我的Floyd-Warshall算法,我试图根据wikipedia伪代码编写我的程序,但它并没有像我那样工作。我创建第二个矩阵来存储路线中的变化,以便我的代码:
for (int w = 0; w < wierzcholki; w++)
{
for (int i = 0; i < wierzcholki; i++)
{
for (int j = 0; j < wierzcholki; j++)
{
if (tablica[i][w] + tablica[w][j] < tablica[i][j]) {
tablica[i][j] = tablica[i][w]
+ tablica[w][j];
next[i][j] = next[i][w];
}
}
}
}
这是我打印最短路径的方法
List<Double> Path(double i, double j) {
if (next[(int) i][(int) j] == Double.POSITIVE_INFINITY) {
return null;
}
List<Double> Wynik = new ArrayList<Double>();
while (i != j) {
i = next[(int) i][(int) j];
Wynik.add(i);
return Path(i, j);
}
return Wynik;
}
然后我把它叫出来找到所有节点之间的路由
Path(0, wierzcholki);
我昨天发布过类似的问题(https://stackoverflow.com/questions/34828364/java-floyd-warshall-algorithm),但我认为我已经接近解决方案了,所以我决定创建新的解决方案。我希望这是允许的。