gpt4 book ai didi

python - 哈密​​尔顿循环 python 错误答案

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:27:28 26 4
gpt4 key购买 nike

给定 n 作为节点数和边数作为边列表

谁能告诉我我的代码有什么问题。它适用于某些情况,但不适用于所有情况

for edgeindex in range(len(edges)):
alltrue = [True]*(n)
visited = [False]*(n)
S = []
start = edges[edgeindex][1]
visited[start] = True
S.append(start)
nex = start
for edgeindex2 in edges[edgeindex:]:
if edgeindex2[0] != nex:
continue
if visited[edgeindex2[1]] == False:
visited[edgeindex2[1]] = True
S.append(edgeindex2[1])
nex = edgeindex2[1]
if visited == alltrue:
return 'yes'
return 'no'

最佳答案

您的代码是一种贪婪的方法,并将它可以行进的下一个边缘添加到您的路径中。然而,这种贪心方法不适用于哈密顿路径问题(它是 NP 完全问题,因此没有已知的“有效”解决方案...)

失败示例:

G = (V,E), V = {1,2,3}, E = {(1,3),(1,2),(2,3)}

现在,假设您从 1 开始,首先经过 (1,3)。此时你已经完成了,你找不到哈密顿路径。但是,路径 1->2->3 存在,您将找不到它。

解决方案:

求解哈密顿路径的最简单方法是生成所有可能的permutations ,并检查它们中的任何一个是否形成哈密顿路径。有更高效(和复杂)的解决方案 - 但它们也需要指数级的运行时间。

关于python - 哈密​​尔顿循环 python 错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22929352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com