#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int map[3][3]={
0,4,11,
6,0,2,
3,100000,0/*这里用100000代替无穷大*/
};
int path[3][3]={/*path里的数据定义为路径的前置跳转点*/
-1,0,0,
1,-1,1,
2,2,-1
};
int main(){
int n=3;
for(int i=0;i<n;i++){/*i为中转点*/
for(int j=0;j<n;j++){/*j为起点*/
for(int k=0;k<n;k++){/*k为终点*/
if(map[j][i]+map[i][k]<map[j][k]){
map[j][k]=map[j][i]+map[i][k];
path[j][k]=i;
}
}
}
}
printf("每对顶点的最短路径为:\n");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(path[i][j]!=-1){
printf("V%d",j);
int temp=path[i][j];
while(temp!=-1){
printf(" <- V%d",temp);
temp=path[i][temp];
}
printf("\t路径长度为%d\n",map[i][j]);
}
}
}
return 0;
}