首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有流容量节点的图的Edmonds-Karp算法

具有流容量节点的图的Edmonds-Karp算法
EN

Stack Overflow用户
提问于 2012-01-06 07:17:11
回答 1查看 6.9K关注 0票数 9

我正在为一个有向图实现这个算法。但有趣的是,这个图节点也有自己的流量能力。我想,这个原来问题的微妙变化,一定要用特殊的方式来处理。因为,在原始的最大流问题中,从开始到结束寻找任何路径都是可以的(实际上,在Edmonds-Karp算法中,我们需要做BFS,并选择到达最终节点的第一条路径),但是对于这个节点容量扩展,我们需要更多地注意“此路径选择”作业。我知道这一点是因为,我实现了原始算法,发现自己获得的流值比max-flow小,我怀疑这与节点容量限制有关。

我为此付出了很多努力,并提出了一些想法,比如通过添加自循环(向每个节点添加自循环,并为路径上的每个节点找到包含此自循环的路径)或添加权重取代初始节点容量约束的虚拟节点和边,将初始图转换为对节点没有容量约束的图。但是,我不相信这些都是解决此问题的好方法。

任何想法都将不胜感激。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-06 08:36:00

从有节点容量的最大流问题到常规的最大流问题有一个简单的简化:

对于图形中的每个顶点v,替换为两个顶点v_inv_outv的每个传入边都应该指向v_inv的每个传出边都应该指向v_out。然后创建一条从v_inv_out的附加边,其容量为c_v,即顶点v的容量。

因此,您只需在转换后的图上运行Edmunds-Karp。

因此,假设您的问题有以下图(顶点v的容量为2):

代码语言:javascript
复制
s --> v --> t
   1  2  1

这将对应于最大流问题中的这个图:

代码语言:javascript
复制
s --> v_in --> v_out --> t
   1        2         1

很明显,得到的最大流就是解决方案(而且证明起来也不是特别困难)。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8751327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档