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