题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如下图所示,G 是一个无向图,其中蓝色边的长度是 1、橘色边的长度是 2、绿色边的长度是 3。
则从 A 到 S 的最短距离是多少?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
import os
import sys
# 请在此输入您的代码
# 录入路线图
r_list = [
["A", "E", 1],
["A", "B", 2],
["A", "C", 1],
["A", "D", 1],
["A", "E", 1],
["B", "G", 1],
["B", "J", 2],
["C", "D", 3],
["C", "G", 3],
["C", "F", 3],
["D", "G", 2],
["D", "H", 1],
["D", "I", 2],
["E", "H", 1],
["E", "I", 3],
["F", "J", 1],
["F", "G", 1],
["G", "K", 2],
["G", "I", 3],
["H", "L", 2],
["H", "I", 1],
["I", "M", 3],
["J", "S", 2],
["K", "N", 1],
["K", "L", 3],
["L", "R", 1],
["L", "M", 1],
["M", "N", 2],
["M", "Q", 1],
["M", "S", 1],
["N", "P", 1],
["Q", "O", 1],
["O", "R", 3],
["P", "O", 1],
["R", "S", 1],
]
# 所有路线
nums = []
# 递归
def get(num, r):
for x, y in enumerate(r_list):
# 上一个点与当前点一致
if y[0] == r[1]:
# 累计长度
num += y[2]
# 直到S才结束
if y[1] == "S":
nums.append(num)
# 否则继续
else:
get(num=num, r=y)
for q, w in enumerate(r_list):
# 从A开始
if w[0] == "A":
get(num=w[2], r=w)
# 取最小值
print(min(nums))