• 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 :
    ",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("
    ");
    80             printf("Total cost : %d
    ",g[s1][e]);
    81             scanf("%d %d",&s,&e);
    82             printf("
    ");
    83         }
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    Java 默认修饰符
    大学生职业规划到底应该规划什么?
    IT就业攻略:看准趋势 选对行业
    积极推动校企深度合作 做好产学结合示范工作
    强化工程实践能力 提升就业核心竞争力
    大学生就业:以“硬”实力实现“软”着陆
    使用IDEA 创建SpringBoot项目
    项目记录随笔
    全国城市数据库sql
    xp win7共享
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3674104.html
Copyright © 2020-2023  润新知