#include<bits/stdc++.h>
using namespace std;
vector<int>ver[10001],edge[10001];
int n,m,s,d[10001];
bool pd[40010];
queue<int> q;
void SPFA(){
q.push(s);
pd[s]=1;d[s]=0;
while(!q.empty()){
int fa=q.front();
q.pop();pd[fa]=0;
for(int i=0;i<ver[fa].size();i++){
int yy=ver[fa][i];
int w=edge[fa][i];
if(d[yy]>d[fa]+w){
d[yy]=d[fa]+w;
q.push(yy);
}
}
}
}
void init(){
cin>>n>>m>>s;
for(int i=1;i<=n;i++) d[i]=INT_MAX;
for(int i=1;i<=m;i++){
int x,y,m;
cin>>x>>y>>m;
ver[x].push_back(y);
edge[x].push_back(m);
}
}
int main(){
init();
SPFA();
for(int i=1;i<=n;i++) printf("%d ",d[i]);
}
单源最短路径(SPFA)
最新推荐文章于 2021-07-25 14:30:17 发布