题解
2024-08-03 12:41:24
发布于:吉林
4阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int N=1005,INF=2147483647;
int a,b,s,maps[N][N],n[N],vis[N];
void init(){
for(int i=1;i<=a;i++){
for(int j=1;j<=a;j++){
maps[i][j]=INF;
}
}
for(int i=0;i<=a;i++)n[i]=INF;
}
void dij(int x){
n[x]=0;
for(int i=1;i<=a;i++){
int u=0;
for(int j=1;j<=a;j++){
if(n[j]<n[u]&&vis[j]==0){
u=j;
}
}
vis[u]=1;
for(int j=1;j<=a;j++){
if(maps[u][j]!=INF){
if(n[j]>n[u]+maps[u][j]){
n[j]=n[u]+maps[u][j];
}
}
}
}
}
int main(){
cin>>a>>b>>s;
init();
for(int i=1;i<=b;i++){
int x,y,z;
cin>>x>>y>>z;
maps[x][y]=min(maps[x][y],z);
}
dij(s);
for(int i=1;i<=a;i++){
if(n[i]==2147483647)cout<<"-1 ";
else cout<<n[i]<<' ';
}
return 0;
}
这里空空如也
有帮助,赞一个