贝尔曼福特,60pts,求调
查看原帖
贝尔曼福特,60pts,求调
939326
tangfanhao楼主2024/6/1 09:34
#include<bits/stdc++.h>
using namespace std;
long long s,n,m,h,dis[114514],fl[114514],u,v,w;
bool fll;
struct ed{
	long long to,from,w;
}a[114514];
void add(int x,int y,int z){
	a[++s].from=x;
	a[s].to=y;
	a[s].w=z;
}
void bf(int x){
	while(fll==0){
		for(int i=1;i<=m;i++){
			if(fl[a[i].from]!=1e9){
				dis[a[i].to]=min(dis[a[i].to],fl[a[i].from]+a[i].w);
			}
		}
		for(int i=1;i<=n;i++){
			if(dis[i]!=fl[i]){
				fl[i]=dis[i];
				fll=1;
			}
		}
		if(fll==0){
			return ;
		}
		fll=0;
	}
}
int main(){
	cin>>n>>m>>h;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		add(u,v,w);
	}
	for(int i=1;i<=n;i++){
		fl[i]=dis[i]=1e18;
	}
	fl[h]=dis[h]=0;
	bf(h);
	for(int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
} 
2024/6/1 09:34
加载中...