Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1.  
  2. /*
  3. floyd记录最短字典序最小的路径
  4. */
  5. #include<stdio.h>
  6. #include<string.h>
  7. #define N 550
  8. #define inf 0x3fffffff
  9. int dis[N][N],path[N][N];
  10. int b[N];
  11. int n;
  12. void floyd()
  13. {
  14.     int i,j,k;
  15.     for(k=1; k<=n; k++)
  16.         for(i=1; i<=n; i++)
  17.             for(j=1; j<=n; j++)
  18.             {
  19.                 if(dis[i][k]==inf||dis[k][j]==inf)continue;
  20.                 int tmp=dis[i][k]+dis[k][j]+b[k];
  21.                 if(dis[i][j]>tmp)
  22.                 {
  23.                     dis[i][j]=tmp;
  24.                     path[i][j]=path[i][k];
  25.                 }
  26.                 else if(dis[i][j]==tmp&&path[i][j]>path[i][k]) //同时判断字典序是否最小
  27.                     path[i][j]=path[i][k];
  28.             }
  29.     return ;
  30. }
  31. int main()
  32. {
  33.     int i,j,k;
  34.     while(scanf("%d",&n),n)
  35.     {
  36.         for(i=1; i<=n; i++)
  37.             for(j=1; j<=n; j++)
  38.             {
  39.                 scanf("%d",&dis[i][j]);
  40.                 if(dis[i][j]==-1)dis[i][j]=inf;
  41.                
  42.                 path[i][j]=j;
  43.             }
  44.         for(i=1; i<=n; i++)
  45.             scanf("%d",&b[i]);
  46.         floyd();
  47.         int s,t;
  48.         while(scanf("%d%d",&s,&t),s!=-1&&t!=-1)
  49.         {
  50.             printf("From %d to %d :\n",s,t);
  51.             printf("Path: ");
  52.             printf("%d",s);
  53.             k=s;
  54.             while(k!=t)
  55.             {
  56.                 k=path[k][t];
  57.                 printf("-->%d",k);
  58.             }
  59.             printf("\n");
  60.             printf("Total cost : %d\n\n",dis[s][t]);
  61.         }
  62.     }
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement