簡體   English   中英

實現最短路徑算法 Dijestra

[英]Implementing Shortest Path Algorithm Dijestra

在下圖中實現 Dijestra 算法,比較時 < 運算符出現錯誤:

        if new_dist < next.get_distance():

錯誤 Function: heapq.heapify(unvisited_queue)

錯誤:

Graph data: ( a, b, 7) ( a, c, 9) ( a, f, 14) ( b, a, 7) ( b, c, 10) ( b, d, 15) ( c, a, 9) ( c, b, 10) ( c, d, 11) ( c, f, 2) ( d, b, 15) ( d, c, 11) ( d, e, 6) ( e, d, 6 ) ( e, f, 9) ( f, a, 14) ( f, c, 2) ( f, e, 9) Dijkstra 的最短路徑 Traceback(最近一次調用最后一次):文件“e:\Graph Theory\DijestraShortestPath. py”,第 156 行,在 dijkstra(g, g.get_vertex('a'), g.get_vertex('e')) 文件“e:\Graph Theory\DijestraShortestPath.py”,第 95 行,在 dijkstra heapq.heapify (unvisited_queue) TypeError: '<' 在 'Vertex' 和 'Vertex' 的實例之間不支持

我們不介意讀者,所以如果您向我們展示您的代碼會更好。

但純粹基於您提供給我們的一點點信息。 您似乎使用“頂點”作為數據結構,而 Python 不知道如何比較兩個頂點結構。

一個很大的可能性是您將(距離,頂點)之類的項目放入堆中,並期望堆能夠對它們進行排序。 但是如果堆中的兩個對象具有相同的距離,則 (distance, vertex1) 和 (distance, vertex2) 最終會比較 vertex1 和 vertex2。

您可以讓您的頂點有一個比較 function,或者您可以保留一個計數器,並通過編寫以下內容將內容添加到堆中:

counter += 1
heapq.heappush(heap, (distance, counter, vertex))

這樣您就可以放心,永遠不會比較頂點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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