[详解]STOER-WAGNER算法求解无向图最大流最小割


算法思想:

假设s,t是图G中的两个点,把s,t合并为一个点后,得到图G/{s,t}
  1. 如果图G的最小割min-cut把s,t点分开,那么s,t的最小割也就是图G的最小割
  2. 如果图G的最小割没有把s,t点分开,那么图G/{s,t}的最小割会把s,t点分开
依据这个思想,在图G中任意选择s,t点,循环寻找最小的s-t-cut,就可以找到图G的最小割

算法:

1. MinimumCutPhase(G,w,a)
A←{a}
while A ≠ V
    if v ∈ A and v ∉ A and w(A,v) = max { w(A,y) | y∉ A }
          merge A and v (注意:在还剩最后两个点的时候停下来,退出循环)
return cut-of-phase = w(A,last two vertices)

- A是图G的子集,初始化时,任意指定一个点a放入A集合中
- w(A,v)是点v与集合A中所有点之间连线的权重的和
- cut-of-phase是指把A和剩下的最后两个点分割开的cut

2. MinimumCut(G,w,a)
while |V| > 1
    cut-of-phase = MinimumCutPhase(G,w,a)
    if cut-of-phase < current-minimum-cut
         current-minumum-cut = cut-of-phase

-初始化current-minimum-cut为第一个cut-of-phase

如果没看懂算法的话,可以先看看下面的例子,再回过头来理解

例子:

图G
————————————–图G如上图所示,各点的权重已给出——————————–

初始化:取点2放入A中:A={2}(也可以选取其他的点,结果没有影响)

这里写图片描述

Phase1:

在余下的所有点中,点3与A的连接权重最大,取出点3放入A中,A={2,3},并且合并A,3为一个点(合并之后注意修改其余点与A之间边的权重:比如A={2,3}之后,4与A的权重就变成了4)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值