最大流最小割算法

来源:互联网 发布:maya2015 mac破解版 编辑:程序博客网 时间:2024/05/21 09:46

原帖:http://blog.sina.com.cn/s/blog_46e8477b0100d2kn.html

最大流和最小割算法从源点开始,找到一个仍有剩余能力的路径,标注剩余能力,剩余能力标注为当前的剩余能力和前一跳剩余能力的较小值,直到标注到汇点。每次寻找下一跳结点按照编号从小到大的顺序如下图所示:源点是VS,汇点是VT。从VS开始,VS到V1的路径没有剩余能力了(5,5)(容量为5,流量也为5,满了),所以看VS到V2的路径(4,2),剩余能力为2(4-2)。所以当前的剩余能力为2,在v2处标记为【vs,2】,表示从vs流入,剩余能力为2,然后看v2到v5,当前剩余能力为3,上一结点v2的剩余能力为2,所以v5处标记为【v2,2】。最大流和最小割算法看v5到v1由于是v1流向v5的,所以标记为【-v5,2】(方向是负的,所以剩余能力直接取上一跳剩余能力即可),然后v1到v4的,剩余能力为3,所以v4处标记为【v1,2】,同理,v4到vt,vt处标记为【v4,2】。然后到了汇点,开始调整这条线路上的流量。由于vt处剩余能力为2,所以这条线路上加2,所以v4到vt的调整为(4,4),v1到v4的调整为(5,4)。v5到v1的调整为(3,1)(由于方向是负的,调整时所以要减2)。v2到v5的调整为(3,2)。vs到v2的调整为(4,4)。然后是vs到v3由于v3到v6的线路也是满流的。所以这条线路也不需要调整了。(只有能到汇点的线路才需要调整)。
这样调整以后得到途中的vs到v1,vs、v2,v3到v6三个所组成的是一个最小割。就是满流的从源到汇的分割线,将源和汇分成了两个部分。所以上图最大流为5+4+2=11.割集为{(vs,v1),(vs,v2),(v3,v6)};

0 0
原创粉丝点击