Я хочу использовать алгоритм Флойда-Уоршалла, чтобы найти кратчайший путь между двумя вершинами. Матрица находится в списке ArrayList ‹ArrayList ‹Integer››. Он всегда довольно маленький, например, матрица 4х4 или 8х8.
В моем классе уже есть матрица расстояний. Я просто пытаюсь создать матрицу «кратчайшего пути». Но это не работает. Он неправильно заполняет мою матрицу.
Я очень надеюсь, что кто-нибудь сможет взглянуть на это и объяснить, что не так.
Моя матрица расстояний:
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;
}