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