求解差分约束系统,可以转化成求解图论的单源最短路径。观察 ,会发现它类似最短路中的三角不等式 ,即 。因此,以每个变数 为结点,对于约束条件 ,连接一条边 ,边权为 。再增加一个原点 与所有定点相连,边权均为0(在某些题目中可能需要根据实际情况进行改动)。对这个图以s为原点运行Bellman-Ford 算法(或SPFA),最终 即为一组可行解。
例如,考虑这样一个问题,寻找一个5维向量 以满足:
这一问题等价于找出未知量 ,满足下列8个差分约束条件:
该问题的一个解为 ,另一个解 ,这2个解是有联系的: 中的每个元素比 中相应的元素大5。
引理:设 是差分约束系统 的一个解,d为任意常数,则 也是该系统 的一个解。
Bellman-Ford 算法伪代码:
# 初始化
for each v in V do
d[v] ← ∞;
d[source] ← 0
# 松弛
for i =1,...,|V|-1 do
for each edge (u,v) in E do
d[v] ← min{d[v], d[u]+w(u,v)}
# 检查负环
for each edge (u, v) in E do
if d[v]> d[u] + w(u,v) then
<无解>