python算法习题(九):最小危险值路径

版权声明:本文为博主原创文章,欢迎转载,但请注明原文出处。 https://blog.csdn.net/GiveMeFive_Y/article/details/79925290

1. 题目

地图上有 m 条无向边,每条边 (x, y, w) 表示位置 x 到位置 y 的权值为 w。从位置 0 到 位置 n 可能有多条路径。我们定义一条路径的危险值为这条路径中所有的边的最大权值。
请问从位置 0 到 位置 n 所有路径中最小的危险值为多少?

注意事项

1 <= m <= 500,1 <= n <= 50,0 <= x, y <= n,1 <= w <= 100000。 题目保证位置 0
一定可以通往位置 n。 题目保证地图中不包含重边。

样例
给出 n = 2, m = 2, x = [0, 1], y = [1, 2], w = [1, 2],返回2。
解释:
路径 1:0->1->2(危险值:2)
最小危险值为2。

给出 n = 3, m = 4, x = [0, 0, 1, 2], y = [1, 2, 3, 3], w = [1, 2, 3, 4],返回3。
解释:
路径 1:0->1->3(危险值:3)
路径 2:0->2->3(危险值:4)
最小危险值为3。

给出 n = 4, m = 5, x = [0, 1, 1, 2, 3], y = [1, 2, 3, 4, 4], w = [3, 2, 4, 2, 1],返回3。
解释:
路径 1:0->1->2->4(危险值:3)
路径 2:0->1->3->4(危险值:4)
最小危险值为3。

给出 n = 5, m = 7, x = [0, 0, 1, 2, 3, 3, 4], y = [1, 2, 3, 4, 4, 5, 5], w = [2, 5, 3, 4, 3, 4, 1],返回3。
解释:
路径 1:0->1->3->5(危险值:4)
路径 2:0->1->3->4->5(危险值:3)
路径 3:0->2->4->3->5(危险值:5)
路径 4:0→2->4→5(危险值:5

2. 思路

可能有网友不理解题目意思,稍微解释一下。x,y,w对应表示点到点的路径和权值:比如:
x=[1,2,3]
y=[4,5,6]
w=[7,8,9]
对应:
(1,4,7)
(2,5,6)
(3,6,9)
是不是突然想到了什么?是的,python强大的zip内置函数!剩下的就跟系列八差不多了。

3. 代码

def path(des,x,y,w):
    ps = list(zip(x, y, w))  # 这里之前犯了一个错,因为zip返回一个生成器会导致遍历不完全
    ret = []
    def myloop(station=0, log=[], danger=0):
        # station表示当前位置,log表是路径记录, danger表示最大危险值
        for p in ps:
            # print(p, station, des)
            if p[0] == station and p[1] == des:
                tmp = log.copy()
                tmp.append(station)
                tmp.append(p[1])
                if danger < p[2]:
                    danger = p[2]
                ret.append((tmp, danger))
            elif p[0] == station:
                tmp = log.copy()
                tmp.append(station)
                if danger < p[2]:
                    danger = p[2]
                myloop(p[1], tmp, danger)
    myloop()
    return ret

print(min(path(3, [0, 0, 1, 2], [1, 2, 3, 3], [1, 2, 3, 4]), key=lambda x: x[1]))
结果:
([0, 1, 3], 3)

4. 总结

没有考虑很多题设,只是为了验证一下自己的思路。如果有错误请留言告知。
九为大数,可能算法刷题模式到此要告一段落了。有些解题思路方法虽然是很笨拙但是却行之有效,也就不纠结了这种问题了。感觉也没几个人看,纯属自我记录一下。

猜你喜欢

转载自blog.csdn.net/GiveMeFive_Y/article/details/79925290