簡體   English   中英

dijkstra算法優先級隊列

[英]dijkstra algorithm priority queue

當我們使用優先隊列編寫 dijkstra 算法時,為什么我們不檢查訪問節點?

while (!pq.empty())
    {
        
        int u = pq.top().second;
        pq.pop();
 
        // Get all adjacent of u.
        for (auto x : adj[u])
        {
            int v = x.first;
            int weight = x.second;
 
            if (dist[v] > dist[u] + weight)
            {
                dist[v] = dist[u] + weight;
                pq.push(make_pair(dist[v], v));
            }
        }

它確實檢查了dist[v]中節點的先前值,我假設它存儲了從根(或u )到節點v的當前最佳距離。 如果找到一條到v的新路徑比之前的最短路徑短,則將其重新插入優先級隊列,因為它現在可能提供到其他節點的更短路徑。 如果這個到v的新距離比之前的長,那么它就不管了。 這就是為什么在實現中沒有else的原因。

暫無
暫無

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

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