hdu 1385 Minimum Transport Cost

http://acm.hdu.edu.cn/showproblem.php?pid=1385

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 1001
 5 using namespace std;
 6 const int inf=9999999;
 7 
 8 int g[maxn][maxn],tax[maxn],pre[maxn][maxn];
 9 int m,n,s,e;
10 
11 void inti()
12 {
13     for(int i=1; i<=n; i++)
14     {
15         for(int j=1; j<=n; j++)
16         {
17             if(i==j) g[i][j]=0;
18             else g[i][j]=inf;
19         }
20     }
21 }
22 
23 void floyd()
24 {
25     for(int k=1; k<=n; k++)
26     {
27         for(int i=1; i<=n; i++)
28         {
29             for(int j=1; j<=n; j++)
30             {
31                 if(g[i][j]>(g[i][k]+g[k][j]+tax[k]))
32                 {
33                     g[i][j]=g[i][k]+g[k][j]+tax[k];
34                     pre[i][j]=pre[i][k];
35                 }
36                 else if(g[i][j]==g[i][k]+g[k][j]+tax[k])
37                 {
38                     if(pre[i][j]>pre[i][k])
39                         pre[i][j]=pre[i][k];
40                 }
41             }
42         }
43     }
44 }
45 
46 int main()
47 {
48     while(scanf("%d",&n)!=EOF)
49     {
50         if(n==0) break;
51         inti();
52         for(int i=1; i<=n; i++)
53         {
54             for(int j=1; j<=n; j++)
55             {
56                 scanf("%d",&m);
57                 if(m!=-1)
58                     g[i][j]=m;
59                 pre[i][j]=j;
60             }
61         }
62         for(int i=1; i<=n; i++)
63         {
64             scanf("%d",&tax[i]);
65         }
66         floyd();
67         scanf("%d%d",&s,&e);
68         while(1)
69         {
70             if(s==-1&&e==-1) break;
71             printf("From %d to %d :\n",s,e);
72             printf("Path: %d",s);
73             int s1=s;
74             while(s!=e)
75             {
76                 printf("-->%d",pre[s][e]);
77                 s=pre[s][e];
78             }
79             printf("\n");
80             printf("Total cost : %d\n",g[s1][e]);
81             scanf("%d %d",&s,&e);
82             printf("\n");
83         }
84     }
85     return 0;
86 }
View Code

 

posted @ 2014-04-18 21:37  null1019  阅读(138)  评论(0)    收藏  举报