#include<iostream> #include<cstdio> using namespace std; int main() { int n,m,h;//n代表有n个顶点,m代表有m个边,h代表出发点 int inf=99999999; int a[1002],b[1002],c[1002],dis[1002];//a用来储存两个顶点之间边的距离 cin>>n>>m>>h; for(int i=0;i<m;i++){//输入m条边 cin>>a[i]>>b[i]>>c[i]; } for(int i=1;i<=n;i++){ dis[i]=inf; } dis[h]=0; for(int i=0;i<n-1;i++){ for(int j=0;j<m;j++){ if(dis[b[j]]>dis[a[j]]+c[j]) dis[b[j]]=dis[a[j]]+c[j]; } } for(int i=1;i<=n;i++){ cout<<dis[i]<<" "; } cout<<endl; return 0; } 样例输入: 5 5 1 2 3 2 1 2 -3 1 5 5 4 5 2 3 4 3 样例输出: 0 -3 -1 2 4
Bellman-Ford普通算法
猜你喜欢
转载自blog.csdn.net/qq_40788630/article/details/80188955
今日推荐
周排行