#include<bits/stdc++.h>
using namespace std;
const int maxn=100000009;
int e[4001][4001],dis[maxn],n,m,flag[maxn],Min,u,s;
int inf=pow(2,31)-1;
void init(){
cin>>n>>m>>s;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j) e[i][j]=0;
else e[i][j]=inf;
for(int i=1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
e[a][b]=c;
e[b][a]=e[a][b];
}
for(int i=1;i<=n;i++)
dis[i]=e[s][i];
flag[s]=1;
return;
}
void dij(){
for(int x=1;x<n;x++){
Min=inf;
for(int i=1;i<=n;i++)
if(flag[i]==0&&dis[i]<Min){
Min=dis[i];
u=i;
}
flag[u]=1;
for(int j=1;j<=n;j++)
if(flag[j]==0&&e[u][j]<inf&&dis[j]>dis[u]+e[u][j])
dis[j]=dis[u]+e[u][j];
}
return;
}
int main(){
init();
dij();
for(int i=1;i<=n;i++)
cout<<dis[i]<<' ';
return 0;
}
为啥全部wa了 /kk
提供一组样例:
in
5 15 5
2 5 181
1 5 98
4 2 49
3 2 262
4 3 26
2 4 192
5 1 221
2 2 254
4 4 233
1 5 44
5 4 67
4 2 214
1 1 47
1 1 118
5 4 3
out
221 52 29 3 0