zoukankan      html  css  js  c++  java
  • dijkstra算法优化

    正常的 dijkstra 因为每v 个节点,每次都要找出未被访问过的最小值 ,复杂度为O(v^2)

    可以用优先队列优化,复杂度为O(E),E为Grape中的边数

    https://www.luogu.org/record/25575996一道卡时间

    #include<bits/stdc++.h>
    #define inf (0x3f3f3f3f)
    using namespace std;
    int main()
    {
        ios::sync_with_stdio(false);    cin.tie(0),cout.tie(0);
        int n,m,s,u,v,w;
        cin>>n>>m>>s;
        vector<pair<int,int>> adj[n];
        for(int i=0;i!=m;++i)
        {
            cin>>u>>v>>w;
            --u,--v;
            adj[u].push_back(make_pair(v,w));
        }
        priority_queue<pair<int,int>> pq;
        vector<bool> vis(n,false);
        vector<int> dis(n,inf);
        dis[--s] = 0;
        pq.push(make_pair(0,s));
        while(!pq.empty())
        {
            int v = pq.top().second;
            int w = pq.top().first;
            pq.pop();
            if(dis[v] < w*-1)
                continue;//不是最短有效边
            vis[v] = true;
            for(int i=0;i!=adj[v].size();++i)
            {
                int cur = adj[v][i].first;
                if(!vis[cur]&&dis[cur] > dis[v] + adj[v][i].second)
                {
                    dis[cur] = dis[v] + adj[v][i].second;
                    pq.push(make_pair(dis[cur]*-1,cur));
                }
            }
        }
        for(int i=0;i!=n;++i)
            cout<<dis[i]<<" ";
    }
    

      

  • 相关阅读:
    C#中平方与n次方
    哈希算法
    C#QQ邮箱发送消息
    C#Unicode和Utf-8
    timeStamp(时间戳)
    GetHashCode
    获取XML中指定属性的值
    MySQL基础之创建和操纵表
    django基础之Django模型
    django基础之Django简介
  • 原文地址:https://www.cnblogs.com/newstartCY/p/11725730.html
Copyright © 2011-2022 走看看