簡體   English   中英

如何在Dijkstra算法中實現優先級隊列

[英]How to implement the priority queue in Dijkstra's algorithm

Dijkstra的算法使用優先級隊列,該隊列按距起點的距離排序,但是頂點的距離在算法過程中會發生變化。 我不確定優先級隊列何時重新排序,但是我是否具有以下比較器:

struct compareByDistance
{
bool operator()(Vertex const &a, Vertex const &b)
    {
        return( getDistance(a) < getDistance(b) );
    }  
};

在算法期間,我們僅從隊列中刪除值,因此我無法想象它會完全重新排序。 因此,如果距離值更改,則隊列將不會按距離順序排列。

您如何與此類似地實施它?

Google min-max(通常是默認值)堆,它將作為優先級隊列。 總是在頂部彈出元素的位置。 這將是距離最小的節點。

一種可能的解決方案是擁有一個訪問數組,該數組跟蹤所有找到最小距離的節點(即,它們已經從隊列中彈出一次)。 每次將項目從隊列中彈出時,請檢查訪問的數組以查看是否已找到節點的最短距離。 如果已經存在,則忽略該元素。 代碼如下:

while(!queue.empty())
{
node n1= queue.top();
queue.pop();
if(visited[n1]) continue;

////
//Rest of the code here
////
}

注意:這可能不是最佳解決方案。

暫無
暫無

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

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