#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
const int maxn=10000+10,inf=1000000000;
using namespace std;
struct node{int to,w;};
int d[maxn],p[maxn];
vector<node> e[maxn];
void add(int x,int y,int z){
node t; t.to=y; t.w=z; e[x].push_back(t);
}
int main(){
int i,j,k,m,n,x,y,z,s;
cin>>n>>m>>s;
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
for(i=1;i<=n;i++)d[i]=inf;
d[s]=0;
for(i=1;i<=n;i++){
int mins=inf;
for(j=1;j<=n;j++)
if(!p[j] && d[j]<mins){
mins=d[j];k=j;
}
p[k]=1;
for(j=0;j<e[k].size();j++){
node v=e[k][j];
if(d[v.to]>d[k]+v.w)d[v.to]=d[k]+v.w;
}
}
for(i=1;i<=n;i++)
if(d[i]<inf)printf("%d ",d[i]);
else printf("2147483647 ");
return 0;
}
单元最短路模板 dijistra
最新推荐文章于 2019-09-12 19:55:00 发布