也不知道哪里写错了,全部WA
查看原帖
也不知道哪里写错了,全部WA
154548
Skywind楼主2021/1/25 15:26

这是代码

#include<bits/stdc++.h>
using namespace std;
int n, m, x, t, i, j, k, a, b, c;
int h[100005], s[100005], f[100005], u[100005];
struct AB{
    int a, b, c, n;
}d[500005];
void cun(int a, int b, int c){
    d[++k].a=a, d[k].b=b, d[k].c=c;
    d[k].n=h[a], h[a]=k;
}
int main(){
    cin>>n>>m>>x;
    for(i=1; i<=m; i++){//储存链表 
        scanf("%d %d %d", &a, &b, &c);
        cun(a, b, c);
        cun(b, a, c);
    }
    memset(s, 9, sizeof(s));//赋值为最大值 
    f[i=j=1]=x, s[x]=0; //起点  
    while(i<=j){
        a=f[i++], u[a]=0;//出队 
        for(k=h[a]; k; k=d[k].n){
            b=d[k].b, c=d[k].c;
            if(s[a]+c<s[b]){
                s[b]=s[a]+c;
                if(!u[b]){//如果不在队列中 
                    f[++j]=b;//入队,队尾++
                    u[b]=1;
                }
            }
        }
    }
    for(i=1; i<=n; i++){
    	cout<<s[i]<<" ";
	}
    return 0;
}
2021/1/25 15:26
加载中...