2022.4.1学习日记
弗洛伊德算法显示各点到各点最短距离和最短路径:
static int top=Integer.MAX_VALUE;
public static void floyd(int[][] G){
int size=G.length;
int D[][]=new int[G.length][G.length];
int Path[][]=new int[G.length][G.length];
// for(int i=0;i< size;i++){
// for(int j=0;j< size;j++){
// Path[i][j]=-1;
// D[i][j]=G[i][j];
// }
// }
for(int i=0;i<G.length;i++) {
for(int j=0;j<G.length;j++) {
D[i][j]=G[i][j];
if(D[i][j]<top&&i!=j) {
Path[i][j]=i;
}
else {
Path[i][j]=-1;
}
}
}
for(int k=0;k< size;k++){
for(int i=0;i< size;i++){
for(int j=0;j< size;j++){
if(D[i][k]!=top&&D[k][j]!=top&&D[i][k]+D[k][j]< D[i][j]){
// 更新i和j两点间的距离
D[i][j]=D[i][k]+D[k][j];
// 更新i和j两点间的路由信息
Path[i][j]=Path[k][j];
}
}
}
}
for(int i=0;i<G.length;i++) {
for(int j=0;j<G.length;j++) {
System.out.print(D[i][j]+" ");
}
System.out.println();
}
System.out.println();
for(int i=0;i<G.length;i++) {
for(int j=0;j<G.length;j++) {
System.out.print(Path[i][j]+" ");
}
System.out.println();
}
}

浙公网安备 33010602011771号