我想列出所有TSP路线组合 .
有5个顶点,因此有10个边:
所有边缘如下:
edges = [('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'D'), ('C', 'E'), ('D', 'E')]
注意: ('A', 'B')
与 ('B', 'A')
相同,其他边也一样 . 我想列出从A开始的所有路线组合,并访问彼此的号码并在A结束 .
这是我到目前为止所得到的:
edges = [('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'D'), ('C', 'E'), ('D', 'E')]
x = list(itertools.permutations(['A','B','C','D','E', 'A'], 6))
b = 1
for i in x:
if i[-1] == 'A' and i[0] == 'A':
print(i, b)
b += 1
但是,我不想要重复的路线 . 我该如何解决这些问题?例如 . A-> B-> C-> A与A-> C-> B-> A相同,不应计数/列出两次 .
1 回答
您可以使用生成器的递归:
输出: