zoukankan      html  css  js  c++  java
  • 商队运输费

    题目描述(图论)

    很久以前,某王国拥有 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

    破题思路

    主要涉及的函数:根据图的遍历,不断更新点到点之间的距离的递归函数update(),根据距离计算花费的函数。
    其它设置:初始化一个全为0的图的邻接矩阵变量,将其设置为全局变量,方便实时共享改变的邻接矩阵变量。

    程序源码

    n = int(raw_input())
    #如果n=5,则有dis=[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
    dis = [[0 for _ in range(n)] for _ in range(n)]
    
    def update(s,a,v):
    #定义全局变量dis
        global dis
        dis[s][a] = v
        dis[a][s] = v
    #print dis
    #确定待更新的矩阵元素位置,存入update_list
        update_list = [i for i in range(n) if (dis[s][i] != 0 and i!= a)]
        if(len(update_list)):
            for i in update_list:
    #比较s到i和i到a的距离,如果dis[a][s]+dis[s][i])<dis[i][a],则说明s为直线ai之间的一个点;如果dis[i][a] == 0,则说明a和i之间没有直达的路。两种情况都需要更新i和a点之间的距离。
                if((v+dis[s][i])<dis[i][a] or dis[i][a] == 0):
                    update(i,a,v+dis[s][i])  
        else:
            return
    edge_list=[]
    for _ in range(n-1):
        s,a,v = map(int, raw_input().split())
        edge_list.append((s,a,v))
        dis[s-1][a-1] = v
    for s,a,v in edge_list:
        update(s-1,a-1,v)
        update(a-1,s-1,v)
        
    #print dis
    #map先取每列的最大值,再取每列最大值的最大值
    max_length = max(map(max,dis))
    #max_length*10+(1+2+...+max_length)
    print max_length*10+(max_length+1)*max_length/2
    
  • 相关阅读:
    php中的抽象方法和抽象类,简单明了,一点通
    PHP_保留两位小数并且四舍五入(可用于精度计算)_保留两位小数并且不四舍五入
    如何使用php生成唯一ID的4种方法
    Redis案例——商品秒杀,购物车
    centos+python2+apache2+django环境搭建
    前端上传图片并显示
    通过容器提交镜像(docker commit)以及推送镜像(docker push)
    Name or service not known原因大全
    VMware Workstation 与 Device/Credential Guard 不兼容.在禁用 Device/Credenti
    win10家庭版VMware,禁用Device/Credential Guard不兼容问题
  • 原文地址:https://www.cnblogs.com/wisteria68/p/12364047.html
Copyright © 2011-2022 走看看