304,294
社区成员
发帖
与我相关
我的任务
分享

#include<bits/stdc++.h>
using namespace std;
struct bian{
int st,ed,w;
} edges[500005];
int n,m,k;
int dis[10005];
bool vis[10005];
int main(){
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
cin>>edges[i].st>>edges[i].ed>>edges[i].w;
}
for(int i=1;i<=n;i++){
dis[i]=0x7fffffff;
}
dis[k]=0;
vis[k]=1;
int cnt=1;
while(1){
for(int i=1;i<=m;i++){
if(edges[i].st==k){
int xda=dis[k]+edges[i].w;
int to=edges[i].ed;
dis[to]=min(dis[to],xda);
}
}
int xyd=0;
int zx=0xfffffff;
for(int i=1;i<=n;i++){
if(vis[i]==false&&dis[i]<zx){
zx=dis[i];
xyd=i;
}
}
if(xyd==0){
break;
}
vis[xyd]=true;
cnt++;
k=xyd;
if(cnt==n){
break;
}
}
for(int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
return 0;
}