其他分享
首页 > 其他分享> > P3371 最短路

P3371 最短路

作者:互联网

原题洛谷P3371

建边+dijstra找最短路

 

#include<bits/stdc++.h>
using namespace std;
struct E    //边
{
    long long v;
    long long next;
    long long w;
}ed[500001];
long long head[500001],acti;
bool b[700000];//标记
long long d[700000];//权
long long n,m,s,mi=0x7ffffff;
long long ans;
long long v1,w1,u1;
void ae(long long u,long long v,long long w) //建边
{
    acti++;
    ed[acti].v=v;
    ed[acti].w=w;
    ed[acti].next=head[u];
    head[u]=acti;
}
int main()
{
    fill(d,d+70000,2147483647);//初始化
    cin>>n>>m>>s;
    for(long long i=1;i<=m;i++)
    {
        cin>>v1>>w1>>u1;
        ae(v1,w1,u1);
    }
    long long cur;
    cur=s;
    d[s]=0;
    while(b[cur]==0)
    {
        mi=2147483647;
        b[cur]=1;
        for(long long i=head[cur];i!=0;i=ed[i].next)
        {
            if(b[ed[i].v]==0 && d[ed[i].v]>d[cur]+ed[i].w)//松弛过程
            {
                d[ed[i].v]=d[cur]+ed[i].w;
            }
        }
        for(long long i=1;i<=n;i++)
        {
            if(b[i]==0 && mi>d[i]) //取最小
            {
                mi=d[i];
                cur=i;
            }
        }
    }
    for(long long i=1;i<=n;i++)
    {
        cout<<d[i]<<' ';//输出
    }
    return 0;
}

 

 

 



标签:head,cur,ed,短路,long,acti,w1,P3371
来源: https://www.cnblogs.com/SoN3ri/p/16219189.html