[英]Why this Dijkstra algorithm is working without using min heap?
我僅使用 FIFO 隊列實現了 Dijkstra 算法,但它仍然通過了 GFG 中的所有測試用例。 這段代碼什么時候會失敗或者如果它有效,那么為什么我們需要使用最小堆?
vector <int> dijkstra(int V, vector<vector<int>> adj[], int S)
{
// adj [] = {{{1, 9}}, {{0, 9}}}
vector<int> dist(V, INT_MAX);
queue<pair<int, int>> pq;
pq.push({0, S});
while(!pq.empty()) {
auto f = pq.front();
pq.pop();
int node = f.second;
int d = f.first;
if (d < dist[node])
{
dist[node] = d;
for(auto i: adj[node]) {
pq.push({d + i[1], i[0]});
}
}
}
return dist;
}
使用 FIFO 而不是最小堆仍然會給你正確的答案,但是你的程序找到答案的時間會更長。
為了引人注目,您需要提供一個大圖作為輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.