百度2016校园招聘-开发测试工程师-在线编程题1-商队运输费

本文探讨了一个关于G商队在王国各大城市间运输商品的问题。利用Floyd最短路径算法,计算了从一个城市出发到另一个城市不休息时可能的最大运输费用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<img src="https://img-blog.youkuaiyun.com/20151005111519668?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />/*
Problem Description:

很久以前,某王国拥有 n 个大城市,为了方便交通,国王下令修建了大量的用于连接首都和其他各大城市高速路。

为节省经费,王国采用了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。并且,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。

G商队是王国重要的运输商队,他们奔波于各大城市之间,为王国的人们运输商品,实现长途贸易。所以,从一个城市马不停蹄地到另一个城市成了G商队最常做的事情。他们有一个钱袋,用于存放往来城市间的运输费。

在运输过程中G商队发现,如果不在某个城市停下来休整,在连续行进过程中,他们所花的运输费与他们已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他们花费的运输费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。

G商队想知道:他们从某一个城市出发,如果中间不休息,到达另一个城市,所有可能花费的运输费中最多是多少呢?

输入:

输入的第一行包含一个整数n,表示包括首都在内的王国的城市数

城市从1开始依次编号,1号城市为首都

接下来n-1行,描述王国的高速路(王国的高速路一定是n-1条)

每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di千米。输入城市数(〈10),长度(〈=100)

输出:

输出一个整数,表示G商队最多花费的运输费是多少

样例输入:

5

1 2 2

1 3 1

2 4 5

2 5 4
样例输出:
135
题解: 
Floyd 最短路径算法 
Author:段廷银
Date:2016.10.5
Email:clickyeah@yeah.net 
*/

#include <stdio.h>
#define N 16

int map[N][N];
int cost;
int max;

int cal(int n)
{ 
     if(n==0) return 0;
     else return cal(n-1)+10+n;
}

int main(int argc, char* argv[])
{
    int n;
    while(scanf("%d",&n)!=EOF) {
        int i,j;
        int a,b,c;
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++) 
        { 
             map[i][j]=2048;
             if(i==j) map[i][j]=0;
        }
        
        for(i=1;i<=n-1;i++) {
            scanf("%d%d%d",&a,&b,&c);
            map[a][b]=c;
            map[b][a]=c;
        }
        
        int k;
        for(k=1;k<=n;k++)
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            if(map[i][j]>map[i][k]+map[k][j]) {
                 map[i][j]=map[i][k]+map[k][j];
            }
        }
        
        max=0;
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            if((cost=cal(map[i][j]))>max) max=cost;   
        }
        printf("%d\n",max);
    } 
    return 0;
}
/*
input:
5
1 2 2
1 3 1
2 4 5
2 5 4
output:
135 
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值