我试图在 C++ 中实现Edmonds-Karp以获得最大流量,但我的编写方式略有不同:
- 我没有遍历残差图中的所有边,而是使用邻接表仅遍历原始图中存在的边。
- 用最小流量更新残差图时,我没有更新任何后边。
有趣的是,当我运行我的代码时,它给了我正确的结果。因此,我查看了Wikipedia 的示例,它专门展示了如何使用后端。当我将此图提供给我的代码时,我再次得到了正确答案。我还检查了结果流矩阵,它与维基百科的相同。
有人可以解释为什么我们必须添加和更新 back-edges,并可能举一个它们很关键的例子吗?
这是我编写的代码(更新为包括后边缘):