[英]hamiltonian cycle python wrong answer
給定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存在,您將找不到它。
解:
解決哈密頓路徑的最簡單方法是生成所有可能的排列 ,並檢查是否有任何形成哈密頓路徑。 有更有效(和復雜)的解決方案-但它們也需要指數運行時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.