簡體   English   中英

使用Dijkstra和最小堆C ++查找節點之間的最短路徑

[英]Finding shortest path between nodes using Dijkstra's and min heap c++

這更是一個普遍的問題。 我有一張地圖,將城市的名稱映射到其節點(包含國家,緯度,經度等基本信息)。 每個城市節點都有一組指向目標節點的邊線。 邊緣具有時間和成本成員。 我想找到在兩個節點之間旅行的最短時間,但是我已經開始迷惑解決此問題的最佳方法。

我創建了自己的基於城市節點向量的min堆類。 我能夠創建地圖,將城市節點從地圖添加到最小堆中。 我已經編寫了dijkstra的算法來查找最短路徑,並且它適用於某些路徑,但並非全部。 相信這是因為當我為dijkstra的算法更新城市節點的權重時,堆沒有正確排序。

更新節點的權重后,應該如何重新堆化堆,以使最低的權重在頂部?

謝謝!

如果您想對整個堆進行排序,請快速瀏覽http://en.wikipedia.org/wiki/Heapsort

那里有一些偽代碼可以幫助您,您可能需要重新排列它以使最低的代碼位於頂部,但這應該對您有用。 否則,您可以查看堆冒泡並在每個階段應用它,而不是完全重新組織堆。

http://en.wikipedia.org/wiki/Binary_heap

在這里描述它們有點復雜,但是向上/向下堆冒泡將確保您的堆被正確組織。 還值得注意的是,在最壞的情況下,堆排序將以O(n log n)運行,而對於大多數操作,冒泡是O(log n)。

暫無
暫無

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

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