zoukankan      html  css  js  c++  java
  • Dijkstra && STL堆+Dijkstra 模版

    朴素Dijkstra : O(V^2)

    void Dijkstra(int s,int n)            // s为起点 s-t是所有点的集合
    {
        for (int i=0;i<n;i++)
            dist[i]=INT_MAX;        //limits.h
        memset(vis,0,sizeof(vis));      //string.h
    
        dist[s]=0;
        int ok=1;
        while(ok)
        {
            ok=0;
            int min=INT_MAX;
            int k;
            for (int i=0;i<n;i++)
                if ((!vis[i])&&(dist[i]<min))
                {
                    min=dist[i];
                    k=i;
                    ok=1;
                }
            vis[k]=1;
            for (int i=0;i<n;i++)
                if (!vis[i])
                {
                    if (dist[i]>dist[k]+d[k][i])
                    {
                        dist[i]=dist[k]+d[k][i];
                    }
                }
    
    
        }
    }

     

    STL堆+Dijkstra: O(ElogV)

    priority_queue <pair<int ,int>,vector<pair<int ,int> >,greater<pair<int,int> > > PQ;
    
    void Dijkstra(int s,int n)
    {
        for (int i=0;i<n;i++)
            dist[i]=INT_MAX;        //limits.h
        memset(vis,0,sizeof(vis));      //string.h
        
        dist[s]=0;
        while(!PQ.empty())
            PQ.pop();
        PQ.push(make_pair(dist[s],s));
        while(!PQ.empty())
        {
            int k=PQ.top().second;
            PQ.pop();
            if (!vis[k])
            {
                vis[k]=1;
                for (int i=0;i<n;i++)
                    if (!vis[i])
                    {
                        if (dist[i]>dist[k]+d[i][k])
                        {
                            dist[i]=dist[k]+d[i][k];
                            PQ.push(make_pair(dist[i],i));
                        }
                    }
            }
        }
    }
    举杯独醉,饮罢飞雪,茫然又一年岁。 ------AbandonZHANG
  • 相关阅读:
    动态内存开辟(一)
    结构体,联合体,枚举,typedef
    练习使用C++的string类
    WIN10 + Qt 5.14(MSVC 2017,32bit) + APP项目(minGW-7.3.0 32bit)+glog
    扫雷游戏
    最小栈实现
    快速排序算法
    c++语句(循环)
    C++ 存储类
    C++ 运算符
  • 原文地址:https://www.cnblogs.com/AbandonZHANG/p/2603958.html
Copyright © 2011-2022 走看看