zoukankan      html  css  js  c++  java
  • dijk的堆优化

    复习了最小生成树和最短路 

    对于prim和dijk的算法复杂度都是o(n*n)

    堆优化可以复杂度降为o((n+m)*log(m))

    因此对于点数很多的稀疏图有较大的优化作用

    dijk的堆优化 算法

    而对于点数较少的图来说则无太大的优化作用

    如图

    上面是堆优化的disjk

    对于小根堆的使用https://blog.csdn.net/xiaoquantouer/article/details/52015928

    裸的模板题 作为例题

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> P;
    vector<P> g[205];//first dis second to
    priority_queue<P,vector<P>,greater<P> > q;
    int vis[205];
    int dis[205];
    int main()
    {
        int n,m;
        int s,e;
        while(~scanf("%d%d",&n,&m))
        {
            memset(vis,0,sizeof(vis));
            if(q.size()) q.pop();
            for(int i=0;i<=200;i++) g[i].clear();
            memset(dis,0x3f,sizeof(dis));
            int tmp1,tmp2,tmp3;
            for(int i=1;i<=m;i++)
            {
                scanf("%d%d%d",&tmp1,&tmp2,&tmp3);
                g[tmp1].push_back(make_pair(tmp3,tmp2));
                g[tmp2].push_back(make_pair(tmp3,tmp1));
            }
            scanf("%d%d",&s,&e);
            q.push(make_pair(0,s));
            dis[s]=0;
            while(q.size())
            {
                int tmp=q.top().second;
                if(vis[tmp]==1) {q.pop();continue;}
                q.pop();
                vis[tmp]=1;//选择加入v
                for(vector<P>::iterator it=g[tmp].begin();it!=g[tmp].end();it++)
                {
                    int pos=dis[tmp]+it->first;
                    if(pos<dis[it->second]&&vis[it->second]==0)
                    {
                        dis[it->second]=pos;
                        q.push(make_pair(pos,it->second));
                    }
                }
            }
            if(dis[e]==0x3f3f3f3f) printf("-1
    ");
            else printf("%d
    ",dis[e]);
        }
    
    }
    

  • 相关阅读:
    第08讲树
    第11讲简单算法
    【ZOJ1004】Anagrams by Stack
    【ZOJ1649】Rescue
    第10讲并查集
    网站建设与网页制作课件
    获取鼠标的坐标
    asp.net页面的默认回车事件
    NeatUpload的安装使用
    Page methods 执行顺序
  • 原文地址:https://www.cnblogs.com/caowenbo/p/11852334.html
Copyright © 2011-2022 走看看