title: 1.旅行商问题
date: 2023-05-05 17:03:26
categories:
- 大学课程内容
- 大二下
- 算法分析基础
1.旅行商问题
【问题描述】
假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
【输入形式】
城市数目,以及城市之间的距离
【输出形式】
所有路径之中的最小值
【样例输入】
4
0,10,15,20
10,0,35,25
15,35,0,30
20,25,30,0
【样例输出】
80
【样例说明】
第一行说明有4个城市;第2至5行说明一个城市与其他城市的距离,其中城市到其自身的距离为0,不可达的城市之间的距离为0。
思路
数据较小,直接全排列枚举所有方案
代码
from itertools import permutations
n = int(input())
ls = []
for i in range(n):
ls.append([int(x) for x in input().split(',')])
def tsp(n, ls):
cities = [i for i in range(n)]
res = float('inf')
for path in permutations(cities):
distance = 0
for i in range(n):
distance += ls[path[i - 1]][path[i]]
res = min(res, distance)
return res
print(tsp(n, ls))