Bellman-Ford算法之计算含有负权值的图(但是不含权值为负的回路) By ACReaper
下面代码为最简单的Bellman-Ford算法的表示,可以用队列进行优化。
#include <stdio.h> #define MAXN 1000 int u[MAXN + 1]; int v[MAXN + 1]; int w[MAXN + 1]; int d[MAXN + 1]; int n,m; int main(){ while(scanf("%d%d",&n,&m) != EOF){ for(int i = 1; i <= m; i++){ scanf("%d%d%d", u + i, v + i, w + i); } const int inf = 1 << 30; for(int i = 1; i <= n ; i++){ d[i] = inf; } d[1] = 0; for(int i = 1; i < n; i++){ for(int e = 1; e <= m; e++){ if(d[v[e]] > d[u[e]] + w[e]){ d[v[e]] = d[u[e]] + w[e]; } } } for(int i = 1; i <= n; i++){ printf("%d ",d[i]); } } return 0; }
By ACReaper