应用
小王是一名基站维护工程师,负责某区域的基站维护。某地方有n个基站(1<n<10),已知各基站之间的距离s(0<s<500),并且基站到基站y的距离,与基站y到基站的距离并不一定会相同。
小王从基站1出发,途经每个基站1次,然后返回基站1,需要请你为他选择一条距离最短的路。
实现
python
n = int(input("站点数:"))
distance = []
for i in range(0, n):
str = input(f"站点{i}到各站点的距离:").split()
lst = [int(s) for s in str]
distance.append(lst)
# print(distance)
visited = [0]
current = 0
sum = 0
result= [5000]
def route(visited, current, sum):
if len(visited) == 1:
for i in range(1, n):
temp = sum + distance[0][i]
visited.append(i)
route(visited, i, temp)
# 复原
visited.pop()
if len(visited) > 1 and len(visited) < n:
for i in range(1, n):
if distance[current][i] != 0 and i not in visited:
temp = sum + distance[current][i]
visited.append(i)
route(visited, i, temp)
visited.pop()
if len(visited) == n:
temp = sum + distance[current][0]
# visited.append(0)
if temp < result[0]:
result[0] = temp
# 启动
route(visited, current, sum)
print(result[0])
powershell
站点数:3
站点0到各站点的距离:0 2 1
站点1到各站点的距离:1 0 2
站点2到各站点的距离:2 1 0
3
站点数:4
站点0到各站点的距离:0 2 1 3
站点1到各站点的距离:1 0 2 5
站点2到各站点的距离:2 1 0 4
站点3到各站点的距离:3 2 6 0
8