我想写一个递归方法来计算旅行商问题的所有可能的路径:旅行商:获得所有可能的路径使用递归
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]
)
然而,当我调试这一点,cities- toCover
列表被跨越allPaths的所有 “实例” 修改。也就是说,它返回第一个有效路径“ABCD”,但之后不会继续,因为下次呼叫时,所有城市都已被移除。
我在做什么错?
我希望这个解释有些什么清楚...
这是一个有趣的练习来工作的细节 - 但如果你想要的是一个解决方案'itertools'具有排列已经内置的。 –