簡體   English   中英

為什么這個 Dijkstra 算法在不使用最小堆的情況下工作?

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

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