int a[][] = { {0, 1000, 1000, 3, 5},
{10, 0, 18, 1000,1000},
{5, 1000, 0, 1000,1000},
{1000,1000,2, 0, 1000},
{1000,1000,2, 2, 0}
};
1.举个小栗子:
由上面两张图可知:
a[1][3] 不可到达、a[1][0] = 10 、 a[0][3] = 3
满足 a[1][3] > a[1][0] + a[0][3]
因此更新 a[1][3] 的值为 a[1][0] + a[0][3]
2.代码实现:
public class FLOD {
public static int[][] flod(int[][] a) {
int n=a[0].length;
int[][] c = a;
for(int k=0;k<n;k++) {
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(c[i][j]>c[i][k]+c[k][j]) {
c[i][j]=c[i][k]+c[k][j];
}
}
}
}
return c;
}
public static void main(String[] args) {
int a[][] = {{0, 1000, 1000, 3, 5},
{10, 0, 18, 1000,1000},
{5, 1000, 0, 1000,1000},
{1000,1000,2, 0, 1000},
{1000,1000,2, 2, 0}};
int c[][] = flod(a);
for(int i=0;i<c.length;i++) {
for(int j=0;j<c[0].length;j++) {
System.out.print(c[i][j]+" ");
}
System.out.println();
}
}
}
矩阵更新后 :