首页 > 其他 > 详细

HDU1385 Minimum Transport Cost

时间:2014-03-04 13:34:31      阅读:522      评论:0      收藏:0      [点我收藏+]

                                                               Minimum Transport Cost

   

题目链接:Clicke Here~

 一道好题,可惜晚上没状态,眼睛痛。T_T所以,就没去想要怎么记录最短路的字典序了。直接看了别人的博客。


#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

const int INF = 999999;
const int N =  100+5;
int n,s,e,tax[N],a[N][N],mp[N][N]; //记录从i到j的最小字典序
void Floyd()
{
    for(int i = 1;i <= n;++i)
      for(int j = 1;j <= n;++j)
         mp[i][j] = j;
    for(int k = 1;k <= n;++k)
      for(int i = 1;i <= n;++i)
        for(int j = 1;j <= n;++j){
           int dist = a[i][k]+a[k][j]+tax[k];
           if(dist < a[i][j]){
              a[i][j] = dist;
              mp[i][j] = mp[i][k];
           }
           if(a[i][j] == dist&&mp[i][j]>mp[i][k]) //更新最小字典序
              mp[i][j] = mp[i][k];
        }
}
int main()
{
    while(scanf("%d",&n),n)
    {
        int x;
        for(int i = 1;i <= n;++i){
           for(int j = 1;j <= n;++j){
              scanf("%d",&x);
              a[i][j] = (x==-1?INF:x);
           }
        }
        for(int i = 1;i <= n;++i)
           scanf("%d",&tax[i]);
        Floyd();
        while(scanf("%d%d",&s,&e),(s!=-1&&e!=-1))
        {
            printf("From %d to %d :\n",s,e);
            printf("Path: %d",s);
            int t = s;
            while(t!=e)
            {
                printf("-->%d",mp[t][e]);
                t = mp[t][e];
            }
            printf("\n");
            printf("Total cost : %d\n\n",a[s][e]);
        }
    }
    return 0;
}



HDU1385 Minimum Transport Cost,布布扣,bubuko.com

HDU1385 Minimum Transport Cost

原文:http://blog.csdn.net/zhongshijunacm/article/details/20394241

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!