关于差分约束系统的建图方法

差分约束系统只是对最短路算法的一种应用,没有什么新的算法,只是对于具体问题的建图方法的确定

----------------------------------------------差分约束系统解决的问题描述---------------------------------------------------------

差分约束系统解决的问题是不等式组的求解:

X1 - X2 <= 0
X1 - X5 <= -1
X2 - X5 <= 1
X3 - X1 <= 5
X4 - X1 <= 4
X4 - X3 <= -1
X5 - X3 <= -3
X5 - X4 <= -3

这就是一个不等式组,给出的不等式组只存在小于等于号,如果有个别的式子是大于等于,我们可以通过两边同时乘-1的得到统一的不等号方向的不等式组。

这个不等式组一定是无解和无数解两种情况,因为如果是存在任意一组解,{x1,x2,x3,x4,x5},我们都可以通过{x1+k,x2+k,x3+k,x4+k,x5+k}得到一个新的解。所以解的个数是无数的。

因为每个数都加k,他们任意两个数之间的差是不变的,所以对于不等式没有影响。

------------------------------------解决差分约束问题的建图方法-及解决方案-------------------------------------------------------

1.对于一个全部都是<=号的不等式组,我们可以将每个式子转化为Xi<=Xj+W(i,j),那么就建一条边,Xj->Xi=W(i,j),然后利用最短路径解决问题,在x0定死的情况下,求得最小值

2.对于一个全部都是>=号的不等式组,我们可以将每个式子转化为Xi>=Xj+W(i,j),那么就建一条边,Xj->Xi=W(i,j),然后利用最长路径解决问题,在x0定死的情况下,求得最大值

如果dis[Xi]为inf或-inf,那么Xi为任意解

如果求最短路的过程中出现负环,那么说明该不等式组无解

--------------------------------------建图方法和解决方案的证明-------------------------------------------------------------------------

1.我们在这里规定dis[x]就是xi的值,那么在最短路的结果中中我们保证的是如果存在两点相连,dis[i]-dis[j] <= w(i,j),正好和不等式组中的式子相符,x0定死,相当于给原点dis[S]==C一个固定的常数值,那么相当于dis[i]求取的都是最小的,那么相当于得到了最小解

2.>=号和最长路的对应关系类似

3.当dis[Xi]==inf 或者 -inf时,那么证明,当前点和原点之间不存在一条路径,那么不能够得到一组确定的解,没有最优解

4.当出现负环的时候,证明无解,因为存在负环的时候,

Xi <= Xj + a

Xj <= Xi + b

若a+b<0的时候存在负环,

这时

两式相加,Xi+Xj <= Xi+Xj+a+b,若a+b<0

那么0<= a+b ,矛盾!!

所以方程无解


你可能感兴趣的:(C++,图论,最短路,差分约束系统)