P3371

#include<iostream>
#include<cstring>
using namespace std;
const int maxn=1000001;
int dis[maxn];
int first[maxn],to[maxn<<1],next[maxn<<1],val[maxn<<1],tot,inf=2147483647;//
bool vis[maxn];//读取访问 
int n,m,s;//点个数、边个数、出发点 
void add(int x,int y,int z)//链表 
{
    next[++tot]=first[x];
    first[x]=tot;
    to[tot]=y;
    val[tot]=z;
}
void dijkstra(int s)//贪心 
{
    dis[s]=0;//初始点初始化 
    for(int i=1;i<n;i++)
    {
        int maxf=inf;//交换数据 
        int k;
        for(int j=1;j<=n;j++)
        {
            if(vis[j]==0&&dis[j]<maxf)//
            {
                maxf=dis[j];
                k=j;
            }
        }
        vis[k]=1;
        for(int j=first[k];j;j=next[j])
        {
            int v=to[j];
            if(vis[v]==0)
            {
                if(dis[v]>dis[k]+val[j])
                {
                    dis[v]=dis[k]+val[j];
                }
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    cin>>s;
    for(int i=1;i<=n;i++){
        dis[i]=inf;
    }
    for(int i=1;i<=m;i++)
    {
        int x,y,z;cin>>x>>y>>z;
        add(x,y,z);
    }
    dijkstra(s);
    for(int i=1;i<=n;i++){
        cout<<dis[i]<<" ";
    }
    
    return 0;
}

版权声明 :

若文中无特殊说明,则本文为原创文章,版权归 幻沙 所有。
所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。

本文链接:

https://crash-logs.cn/wrong/crash-2021-07-01_173-client.txt
1 + 1 =
快来做第一个评论的人吧~