public class AllPairsShortestPaths {
static final int M = 10000; //unreachable
//extend-shortest-path
static int[][] extendShortestPath(int[][] L, int[][] W) {
int[][] R = new int[L.length][L[0].length];
int n = L.length;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
R[i][j] = M;
for(int k = 0; k < n; k++) {
if(R[i][j] > (L[i][k] + W[k][j]))
R[i][j] = L[i][k] + W[k][j];
}
}
}
return R;
}
//slow-all-pairs-shortest-paths
static void slowAllPairsShortestPaths(int[][] W) {
int n = W.length;
/*
* D1 = W
* max n - 1 edges
* L(n-1) == L(n) == L(n + 1)
*/
int[][] L = W;
for(int i = 2; i < n; i++) {
L = extendShortestPath(L, W);
}
//print
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
System.out.
每对顶点的最短路径 : 基本算法
最新推荐文章于 2021-05-28 21:13:46 发布