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

posted @ 2013-04-29 17:09  算法黑魔王  阅读(182)  评论(0编辑  收藏  举报