在存在負邊時,當最短路存在時可以求出來,不存在時可以檢測出來。
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;
}