【发布时间】:2016-08-09 06:50:34
【问题描述】:
我试图在 C++ 中实现 Edmonds-Karp 以获得最大流量,但我的编写方式略有不同:
- 我没有遍历残差图中的所有边,而是使用邻接表仅遍历原始图中存在的边。
- 在使用最小流量更新残差图时,我没有更新任何后边。
有趣的是,当我运行我的代码时,它给了我正确的结果。所以我去了Wikipedia's example,它专门展示了如何使用后端。当我将此图表输入到我的代码中时,我又得到了正确答案。 我还检查了结果流矩阵,它与维基百科的相同。
有人可以解释为什么我们必须添加和更新后端,并举个例子说明它们很重要吗?
Here 是我编写的代码(已更新为包含后端):
【问题讨论】:
-
只是为了确保理解好,是不是说当你以相反的方式取一个圆弧时,你并没有更新这个圆弧上的流量值?
-
@DamienProt 我有这样的想法,我不遍历残差图,而是只遍历原始邻接列表。所以我从来没有访问过任何后端,也没有看到任何更新的意义。
标签: c++ algorithm graph ford-fulkerson edmonds-karp