学习小结——BELLMAN-FORD

昨天讲了差分约束系统。。发现自己连BELLMAN-FORD都还不会。。。

今天看书 尝试搞了一个。。自己设计的小数据运行无误。。

#include <stdio.h>

#define inf 1000000000
#define MAXN 8

int edge[MAXN][MAXN];

int dist[MAXN];
int prev[MAXN];

int n;
int m;

void addedge(int a, int b, int len)
{
	edge[a][b]=len;
}

void bf(int src)
{
//	for (int i=0; i<n; i++) {
//		dist[i]=edge[src][i];
//		if(i!=src && dist[i]<inf) prev[i]=src;
//		else prev[i]=-1;
//	}
	dist[0]=0;
	for(int k=0; k<n; k++) {
		for(int u=0;u<n;u++) {
			if(u!=src) {
				for(int j=0; j<n; j++) {
					if(edge[j][u]<inf && dist[j]+edge[j][u] < dist[u]) {
						dist[u]=dist[j] + edge[j][u];
						prev[u]=j;
					}
				}
			}
		}
	}
}

int a,b,len;

int main()
{
	scanf("%d",&n);
	
	for (int i=0; i<n; i++) {
		for(int j=0; j<n; j++) {
			if(i==j) edge[i][j]=0;
			else edge[i][j]=inf;
		}
		dist[i]=inf;
		prev[i]=-1;
	}
	
	while (scanf("%d%d%d",&a,&b,&len),~a) {
		addedge(a,b,len);
	}
	
	bf(0);
	
	for(int i=0; i<n; i++) {
		printf("%d\n",dist[i]);
		int idx=prev[i];
		//while(~idx) {
		//	printf("%d ",idx);
		//	idx=prev[idx];
		//}
		putchar('\n');
	}
}

  

posted on 2011-07-21 16:54  Eucalyptus  阅读(154)  评论(0编辑  收藏  举报