先引用网上的关于差分约束的解释:
一、引例
1、一类不等式组的解
给定n个变量和m个不等式,每个不等式形如 x[i] – x[j] <= a[k] (0 <= i, j < n, 0 <= k < m, a[k]已知),求 x[n-1] – x[0] 的最大值。例如当n = 4,m = 5,不等式组如图一-1-1所示的情况,求x3 – x0的最大值。
图一-1-1
观察x3 – x0的性质,我们如果可以通过不等式的两两加和得到c个形如 x3 – x0 <= Ti 的不等式,那么 min{ Ti | 0 <= i < c } 就是我们要求的x3 – x0的最大值。于是开始人肉,费尽千辛万苦,终于整理出以下三个不等式:
-
(3) x3 – x0 <= 8
-
(2) + (5) x3 – x0 <= 9
-
(1) + (4) + (5) x3 – x0 <= 7
这里的T等于{8, 9, 7},所以min{ T } = 7,答案就是7。的确是7吗?我们再仔细看看,发现的确没有其它情况了。那么问题就是这种方法即使做出来了还是带有问号的,不能确定正确与否,如何系统地解决这类问题呢?
让我们来看另一个问题,这个问题描述相对简单,给定四个小岛以及小岛之间的有向距离,问从第0个岛到第3个岛的最短距离。如图一-1-2所示,箭头指向的线段代表两个小岛之间的有向边,蓝色数字代表距离权值。
图一-1-2
这个问题就是经典的最短路问题。由于这个图比较简单,我们可以枚举所有的路线,发现总共三条路线,如下:
-
0 -> 3 长度为8
-
0 -> 2 -> 3 长度为7+2 = 9
-
0 -> 1 -> 2 -> 3 长度为2 + 3 + 2 = 7
最短路为三条线路中的长度的最小值即7,所以最短路的长度就是7。这和上面的不等式有什么关系呢?还是先来看看最短路求解的原理,看懂原理自然就能想到两者的联系了。
若有负环,则不等式组解不存在:
若存在负环,则已知a+b+c<0。
又已知:
B-A<=c……1
C-B<=a……2
A-C<=b……3
假设存在解A,B,C
2+3得:A-B<=a+b
和1联立得:-c<=A-B<=a+b
又因为:a+b<-c
所以:a+b<a+b,明显不符合,所以解不存在
解的存在性
上文提到最短路的时候,会出现负权圈或者根本就不可达的情况,所以在不等式组转化的图上也有可能出现上述情况,先来看负权圈的情况,如图三-3-1,下图为5个变量5个不等式转化后的图,需要求得是X[t] – X[s]的最大值,可以转化成求s到t的最短路,但是路径中出现负权圈,则表示最短路无限小,即不存在最短路,那么在不等式上的表现即X[t] – X[s] <= T中的T无限小,得出的结论就是 X[t] – X[s]的最大值 不存在。
图三-3-1
再来看另一种情况,即从起点s无法到达t的情况,如图三-3-2,表明X[t]和X[s]之间并没有约束关系,这种情况下X[t] – X[s]的最大值是无限大,这就表明了X[t]和X[s]的取值有无限多种。
图三-3-2
在实际问题中这两种情况会让你给出不同的输出。综上所述,差分约束系统的解有三种情况:1、有解;2、无解;3、无限多解;