算法
Bellman-Ford(G, w, s)
for each vertex v 属于 V[G]
d[v] = 无穷大
p[v] = NIL
d[s] = 0
for i = 1 to |V[G]| - 1
relax(u, v, w)
for each edge(u, v)属于E[G]
if d[v] > d[u] + w(u, v)
return false
return true
n表示图中的顶点数,m表示边数,时间复杂度为O(nm)
应用
差分约束系统
形如有多个约束
x
j
−
x
i
≤
d
k
x_j - x_i \le d_k
xj−xi≤dk
对于此,可以构造表示从
x
i
x_i
xi到
x
j
x_j
xj的边,其权值为
d
k
d_k
dk,起始点用s表示, 其到
x
i
x_i
xi的权值为0,构造的图如果没有环说明有解,否则无解