求助,只过了两个点
查看原帖
求助,只过了两个点
518580
Galaxy6楼主2021/7/17 19:04
#include<bits/stdc++.h>
#define maxn 200005
#define inf 0x3f3f3f3f
using namespace std;
int n,m,s,cnt,vis[maxn],dis[maxn],head[maxn];;
struct edge{
    int to,next,weight;
}e[maxn];
void add(int u,int v,int w){
    e[++cnt].to=v;
    e[cnt].weight=w;
    e[cnt].next=head[u];
    head[u]=cnt;
}
struct node{
    int id,d;
    node(int i,int ds)
    {
        id=i;d=ds;
    }
    bool operator< (const node&a) const{
        return d>a.d;
    }
};
void dij(int s)
{
    priority_queue<node>q;
    memset(dis,0x3f,sizeof(dis));//将起点到其余所有点的距离初始化为inf
    dis[s]=0;//起点到自身置为0
    node n(s,dis[s]);
    q.push(n);
    while(!q.empty())
    {
        node t=q.top();
        q.pop();
        vis[t.id]=1;
        for(int i=head[t.id];i;i=e[i].next){
                if(!vis[e[i].to]){
                dis[e[i].to]=min(dis[e[i].to],dis[t.id]+e[i].weight);
                node n1(e[i].to,dis[e[i].to]);
                q.push(n1);
                }
        }
    }
}
int main()
{
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        add(u,v,w);
    }
    dij(s);
    for(int i=1;i<=n;i++){
        if(dis[i]>=inf) printf("2147483647 ");
        else printf("%d ",dis[i]);
    }
    return 0;
}
2021/7/17 19:04
加载中...