HDOJ1385 Minumum Transportation Cost ------简单的floyd

来源:互联网 发布:扫描大师软件下载 编辑:程序博客网 时间:2024/05/21 14:58
#include"stdio.h"#define INF 100000000#define N 100int G[N][N],tax[N],i,j,k,n,t,s,e;int path[N][N];void floyd(){          for(k=0;k<n;k++)                    for(i=0;i<n;i++)                              for(j=0;j<n;j++)                              {                                        t=G[i][k]+G[k][j]+tax[k];                                        if(t<G[i][j])                                                G[i][j]=t,path[i][j]=path[i][k];                                        else if(t==G[i][j])                                                if(path[i][k]<path[i][j])path[i][j]=path[i][k];                              } }                                                        main(){          while(scanf("%d",&n),n)          {                    for(i=0;i<n;i++)                              for(j=0;j<n;j++)                              {                                        scanf("%d",&G[i][j]);                                        if(G[i][j]==-1)G[i][j]=INF;                                        path[i][j]=j;// 初始化; 表示从i到j线路上的不包含i、j的第一个顶点                               }                    for(i=0;i<n;i++)scanf("%d",&tax[i]);                    floyd();                    while(scanf("%d%d",&s,&e)!=EOF&&s!=-1&&e!=-1)                    {                              printf("From %d to %d :\n",s,e);                              printf("Path: %d",s);                              k=s-1;                              while(k!=e-1)                              {                                           printf("-->%d",path[k][e-1]+1);                                           k=path[k][e-1];                              }                              printf("\nTotal cost : %d\n\n",G[s-1][e-1]);                    }          }          return 0;}