【发布时间】:2016-08-17 08:00:21
【问题描述】:
我正在尝试编写一个递归方法来计算旅行商问题的所有可能路径:
def allPaths(toCover, path=""):
path = path + toCover[0]
toCover.remove(toCover[0])
if len(toCover)>0:
for x in range (0, len(toCover)):
#swop cities
temp = toCover[0]
toCover[0] = toCover[x]
toCover[x] = temp
allPaths(toCover, path)
else :
print path
cities = ["A", "B", "C", "D"]
allPaths(cities)
所以,我有一个城市列表。
我将列表中的第一个城市添加到当前路径。
我从城市toCover 列表中删除了添加的城市。
对于列表中剩余的每个城市,我再次调用allPaths() 函数。我修改了列表参数,每个城市都在索引 0 上一次。
(我想用以下列表实例调用 allPaths:
[B,C,D]
[C,B,D]
[D,C,B]
)
但是,当我对此进行调试时,city-toCover 列表会在 allPaths 的所有“实例”中进行修改。这意味着,它返回第一个有效路径“ABCD”,但随后不会继续,因为对于下一次调用,所有城市都已被删除。
我做错了什么?
我希望这个解释有点清楚......
【问题讨论】:
-
找出细节是一个有趣的练习——但如果你想要的只是一个解决方案,
itertools已经内置了排列。
标签: python recursion traveling-salesman