#include<bits/stdc++.h>
using namespace std;
const int N=5*1e5+10;
struct edge{
int u;
int v;
int w;
}e[N];
int n,m,s,dis[N];
bool bellman_ford(int x){
dis[x]=0;
for(int i=1;i<n;i++){
bool flg=false;
for(int j=1;j<=m;j++){
if(dis[e[j].v]>dis[e[j].u]+e[j].w){
dis[e[j].v]=dis[e[j].u]+e[j].w;
flg=true;
}
}
if(!flg) return false;
}
for(int j=1;j<=m;j++)
if(dis[e[j].v]>dis[e[j].u]+e[j].w)
return true;
return false;
}
int main(){
memset(dis,0x3f3f3f3f,sizeof(dis));
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
e[i].u=a,e[i].v=b,e[i].w=c;
}
if(!bellman_ford(s))
cout<<"Negative Loop Exists!"<<endl;
for(int i=1;i<=n;i++){
if(dis[i]==0x3f3f3f3f)
cout<<"Can't Reach ";
else cout<<dis[i]<<' ';
}
cout<<endl;
return 0;
}
Bellman_Ford最短路
最新推荐文章于 2024-10-08 00:02:21 发布
这段代码实现了一个C++程序,利用Bellman-Ford算法在加权有向图中寻找从源点到其他顶点的最短路径。如果存在负权边形成的负权环,程序会输出NegativeLoopExists!,否则输出各顶点到源点的最短距离。
摘要由CSDN通过智能技术生成