1 #include<stdio.h> 2 int dis[601][601]; 3 int path[601][601]; 4 void floyd(int n) 5 { 6 for(int k=1;k<=n;k++) 7 { 8 for(int i=1;i<=n;i++) 9 { 10 for(int j=1;j<=n;j++) 11 { 12 printf("d[%d][%d]=%d ",i,j,dis[i][j]); 13 printf("d[%d][%d]=%d d[%d][%d]=%d\n",i,k,dis[i][k],k,j,dis[k][j]); 14 15 if(dis[i][k]+dis[k][j]<dis[i][j]) 16 { 17 dis[i][j]=dis[i][k]+dis[k][j]; 18 printf("%d\n\n",dis[1][2]); 19 path[i][j]=path[k][j]; 20 } 21 } 22 } 23 } 24 } 25 26 27 void find(int a,int b) 28 { 29 int p[100],k=0; 30 p[k++]=b; 31 while(path[a][b]!=a) 32 { 33 p[k++]=path[a][b]; 34 b=path[a][b]; 35 } 36 p[k++]=a; 37 for(int i=k-1;i>=0;i--) 38 { 39 if(i!=0) 40 printf("%d -> ",p[i]); 41 else 42 printf("%d\n",p[i]); 43 } 44 printf("%d",dis[1][2]); 45 printf("\n"); 46 } 47 int main() 48 { 49 int n,m; 50 scanf("%d %d",&n,&m); 51 int a,b,k,i,j; 52 for(i=1;i<=n;i++) 53 for(j=1;j<=n;j++) 54 { 55 path[i][j]=i; 56 dis[i][j]=100000; 57 } 58 for(i=1;i<=m;i++) 59 { 60 scanf("%d %d %d",&a,&b,&k); 61 dis[a][b]=dis[b][a]=k; 62 } 63 floyd(n); 64 find(1,2); 65 return 0; 66 }
相关文章: