簡體   English   中英

漢密爾頓周期蟒蛇錯誤的答案

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM