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

时间:2014-04-08 06:35:31

标签: python algorithm hamiltonian-cycle

将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'

1 个答案:

答案 0 :(得分:1)

您的代码是一种贪婪的方法,并添加它可以传递到您的路径的下一个边缘。然而,这种贪婪的方法不适用于哈密顿路径问题(NP-Complete,因此没有已知的'有效'解决方案......)

示例失败:

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

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

<强>解决方案:

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