zoukankan      html  css  js  c++  java
  • 单源最短路SPFA算法


    $huaji^{233……}$
    模板:
    洛谷 P3371

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstdlib>
    #include<queue>
    using namespace std;
    struct data{
        int v;int next;
        int value;
        
    }edge[500010];
    int cnt;
    int alist[10010];
    void add(int u,int v,int value)
    {
        edge[++cnt].v=v;
        edge[cnt].value=value;
        edge[cnt].next=alist[u];
        alist[u]=cnt;
        return ;
    }
    queue<int> q;
    bool ins[10010];
    int d[10010];
    void spfa(int x)
    {
        d[x]=0;
        q.push(x);
        ins[x]=true;
        while(!q.empty())
        {
            int now=q.front();
            q.pop();ins[now]=false;
            int next=alist[now];
            while(next)
            {
                int v=edge[next].v;
                int value=edge[next].value;
                if(d[v]>d[now]+value)
                {
                    d[v]=d[now]+value;
                    if(!ins[v])
                    {
                        q.push(v);
                        ins[v]=true;
                    }
                }
                next=edge[next].next;
            }
        }
        return ;
    }
    int m,n,s;
    int main()
    {
        scanf("%d%d%d",&m,&n,&s);
        for(int i=1;i<=n;i++)
        {
            int u,v,value;
            scanf("%d%d%d",&u,&v,&value);
            add(u,v,value);
        }
        for(int i=0;i<=m;i++)
        {
            d[i]=2147483647;//此处有坑233...确切的来说是第三个点有坑
         }
        spfa(s);
        for(int i=1;i<=m;i++)
        {
            printf("%d ",d[i]);
        }
        return 0;
    }
  • 相关阅读:
    C语言基础10
    swift笔记06
    C语言基础09
    C语言基础08
    C语言基础07
    C语言基础06
    swift笔记05
    Swift笔记4
    C语言基础05
    [转]一个清华计算机博士生的退学申请
  • 原文地址:https://www.cnblogs.com/arcturus/p/9179992.html
Copyright © 2011-2022 走看看