最短路——Bellman-Ford

在存在負邊時,當最短路存在時可以求出來,不存在時可以檢測出來。

const int maxn = 110;
const int max_int = ~(1<<31);
const int min_int = (1<<31);

int u[maxn], v[maxn], w[maxn], dist[maxn];
//[0,max_int]

int bellmanford(int s){
	for(int i = 0; i < n; ++i){
		dist[i] = max_int;
	}
	dust[s] = 0;
	for(int k = 1; k < n; ++k){
		for(int i = 0; i < m; ++i){
			int x = u[i], y = v[i];
			if(dist[x] < max_int){
				dist[y] = min(dist[y], dist[x] + w[i]);
			}
		}
	}
	for(int i = 0; i < m; ++i){
		int x = u[i], y = v[i];
		if(dist[x] < max_int && dist[y] < dist[x] + w[i]){
			return -1;
		}
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章