• Dijkstra+堆优化


    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <queue>
    using namespace std;
    const int inf=0x3f3f3f3f;
    
    int n,m,k=1;
    int head[30000+10];
    int vis[30000+10];
    int dis[30000+10];
    
    struct edge
    {
        int v,w,next;
    }e[300000+10];
    
    void adde(int u,int v,int w)
    {
        e[k].v=v;
        e[k].w=w;
        e[k].next=head[u];
        head[u]=k++;
    }
    
    void readdata()
    {
        memset(head,-1,sizeof(head));
        memset(dis,inf,sizeof(dis));
        int a,b,c;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            adde(a,b,c);
            //adde(b,a,c);
        }
    }
    
    void dijkstra()
    {
        typedef pair <int,int >pii;
        priority_queue<pii,vector<pii>,greater<pii> >q;
        dis[1]=0;
        q.push(make_pair(dis[1],1));
        while(!q.empty())
        {
            int u=q.top().second;
            q.pop();
            if(vis[u])continue;
            vis[u]=1;
            for(int i=head[u];i!=-1;i=e[i].next)
            {
                int v=e[i].v;
                if(dis[v]>dis[u]+e[i].w)
                {
                    dis[v]=dis[u]+e[i].w;
                    q.push(make_pair(dis[v],v));
                }
            }
        }
        printf("%d
    ",dis[n]);
    }
    
    void spfa()
    {
        queue<int >q;
        dis[1]=0;
        q.push(1);
        vis[1]=1;
        while(!q.empty())
        {
            int u=q.front();
            q.pop();
            vis[u]=0;
            for(int i=head[u];i!=-1;i=e[i].next)
            {
                int v=e[i].v;
                if(dis[v]>dis[u]+e[i].w)
                {
                    dis[v]=dis[u]+e[i].w;
                    if(!vis[v])
                    {
                        q.push(v);
                        vis[v]=1;
                    }
                }
            }
        }
        printf("%d
    ",dis[n]);
    }
    
    int main()
    {
        freopen("1.in","r",stdin);
        freopen("1.out","w",stdout);
        readdata();
        //dijkstra();
        spfa();
        return 0;
    }

    关于spfa,它死了。

  • 相关阅读:
    接口测试框架——第五篇-测试用例和运行用例
    接口测试框架——第四篇-url、excel内容等
    flex布局
    JSON 对象 与 字符串 互转
    nginx 拒绝本地ip访问
    supervisord
    工作中小玩意
    nginx 反向代理
    php获取当月天数及当月第一天及最后一天
    Homebrew 备忘
  • 原文地址:https://www.cnblogs.com/719666a/p/9500804.html
Copyright © 2020-2023  润新知