Я пытаюсь написать метод рекурсии рассчитать все возможные пути задачи коммивояжера:коммивояжера: Получить все возможные пути с помощью рекурсии
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()
. Я изменяю параметр списка, чтобы каждый город был проиндексирован один раз.
(Я хочу, чтобы вызвать allPaths со следующими экземплярами списка:
[B,C,D]
[C,B,D]
[D,C,B]
)
Однако, когда я отладки это, cities- toCover
список модифицируется во всех "экземпляры" allPaths , Это означает, что он возвращает первый допустимый путь «ABCD», но затем не продолжается, потому что для следующего вызова все города уже удалены.
Что я делаю неправильно?
Я надеюсь, что это объяснение некоторые, что ясно ...
Это веселое упражнение, чтобы отработать детали - но если все, что вы хотите, это решение 'itertools' имеет перестановки уже встроены. –