码迷,mamicode.com
首页 > 其他好文 > 详细

邻接表

时间:2018-03-04 11:55:56      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:add   lib   rom   from   namespace   gpo   scan   int   std   

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
queue<long long>q;
long long v[1000010],minn[1000100];
long long n,m,s,lin[1000010],tot=0;
struct min_road{
    long long from,to,next,len;
}e[1000010];
void add(long long f,long long t,long long l)
{
    e[++tot].from=f;
    e[tot].to=t;
    e[tot].len=l;
    e[tot].next=lin[f];
    lin[f]=tot;
}
int main()
{

    scanf("%lld%lld%lld",&n,&m,&s);
    for(int i=1;i<=n;i++)minn[i]=2147483647;
    for(int i=1;i<=m;i++)
    {
       long long f,t,l;
        scanf("%lld%lld%lld",&f,&t,&l);
        add(f,t,l);
    }
    q.push(s);
    v[s]=1;
    minn[s]=0;
    while(!q.empty())
    {
       long long cur=q.front();
        q.pop();
        v[cur]=0;
        for(long long i=lin[cur];i;i=e[i].next)
        {
            if(minn[e[i].to]>minn[cur]+e[i].len)
            {
                minn[e[i].to]=minn[cur]+e[i].len;
                if(!v[e[i].to])
                {
                q.push(e[i].to);
                v[e[i].to]=1;
                }

            }
        }
    }
    for(int i=1;i<=n;i++)
    printf("%lld ",minn[i]);
}

  这就是SPFA的邻接表存法,用于变多的情况

邻接表

标签:add   lib   rom   from   namespace   gpo   scan   int   std   

原文地址:https://www.cnblogs.com/liuwenyao/p/8503990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!