4.22
弗洛伊德算法显示各点到各点最短距离和最短路径:
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();
}
}