Как мне получить каждый кратчайший путь от вершины 1 к вершине 10, имеющий одинаковый вес, с помощью алгоритма Флойда-Уоршалла? Мне удалось получить общее количество всех кратчайших путей от вершины 1 до вершины 10.
public static int[][] shortestpath(int[][] adj, int[][] path, int[][] count) {
int n = adj.length;
int[][] ans = new int[n][n];
copy(ans, adj);
// Compute incremently better paths through vertex k.
for (int k = 0; k < n; k++) {
// Iterate through each possible pair of points.
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// Check if it is better to go through k as an intermediate vertex.
if (ans[i][k] + ans[k][j] < ans[i][j]) {
ans[i][j] = ans[i][k] + ans[k][j];
path[i][j] = path[k][j];
count[i][j] = count[i][k]*count[k][j];
} else if ((ans[i][j] == ans[i][k]+ans[k][j]) && (k!=j) && (k!=i)) {
count[i][j] += count[i][k]*count[k][j];
}
}
}
}
// Return the shortest path matrix.
return ans;
}
public static void copy(int[][] a, int[][] b) {
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[0].length; j++)
a[i][j] = b[i][j];
}
Я только что добавил функцию копирования.




Используйте алгоритм один раз, чтобы найти взвешенную длину для каждой вершины кратчайшего пути из v1.
Снова используйте алгоритм, чтобы найти взвешенную длину для каждой вершины кратчайшего пути к v10.
Все вершины, находящиеся на кратчайшем пути, будут иметь сумму этих двух взвешенных длин, равную взвешенной длине от v1 до v10. Ребро направленный находится на кратчайшем пути тогда и только тогда, когда обе вершины находятся на кратчайшем пути, а вес исходного ребра равен разнице взвешенной длины с v1.
Это даст вам направленный подграф всего на кратчайших путях, при этом большая часть затрат будет связана с двумя запусками базового алгоритма. Вы можете перечислить его рекурсивно. Имейте в виду, что может быть много кратчайших путей, и поэтому выполнение самого перечисления может занять экспоненциально много времени.
Спасибо за ответ. Я запрограммирую его и вернусь, если у меня возникнут проблемы
Можете добавить реализацию метода
copy?