我正在尝试学习在Java中实现Ford-Fulkersons算法,并在互联网上找到了一些帮助,但我陷入了这段代码

        // update residual capacities of the edges and
        // reverse edges along the path
        for (v=t; v != s; v=parent[v])
        {
            u = parent[v];
            rGraph[u][v] -= path_flow;
            rGraph[v][u] += path_flow;
        }


感谢您的评论,我有点理解它的工作原理,但并不确定为什么要这样做。为什么需要减去?

资料来源:http://www.geeksforgeeks.org/ford-fulkerson-algorithm-for-maximum-flow-problem/

最佳答案

如果您可以沿一条边沿任一方向推动流,则从A到B的净流必须在大小上相等,并且在符号上与从B到A的净流相反。

就像在电路分析中一样:如果从A到B流过5安培电流,那么从B到A则流过-5A电流。

A     Resistor      B
O-----[======]------O
  5A ->

A     Resistor      B
O-----[======]------O
             <- -5A


因此,通过将“更多”从A推到B,您必须将从B推到A的数量减少相应的数量。

09-27 09:37