美文网首页算法
Dijkstra算法的堆优化

Dijkstra算法的堆优化

作者: codinRay | 来源:发表于2017-04-12 20:39 被阅读0次

    使用堆优化Dijkstra算法,
    可以使其复杂度从O(V^2)降低到O(|E| log|V|)。

    typedef pair<int, int> pr; // first is No.,second is d[No.]
    void Dijkstra(int s) {
    // 使用greater构造一个从小到大取值的优先队列 
        priority_queue<pr, vector<pr>, greater<pr> > q;
        fill(d + 1, d + v + 1, INF);
        d[s] = 0;
        q.push(pr(s, 0));
        
        while(!q.empty()) {
            pr v = q.top();
            q.pop();
            
            int vNo = v.first;
            if(d[vNo] < v.second) 
                continue;
            for(edge E : lj[vNo]) {
                if(d[E.to] > d[vNo] + E.cost) {
                    d[E.to] = d[vNo] + E.cost;
                    q.push(pr(E.to, d[E.to]));
                }
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:Dijkstra算法的堆优化

        本文链接:https://www.haomeiwen.com/subject/byqvattx.html