这是代码
#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;
}