我正在尝试用 Java 实现 Ford Fulkerson 算法。到目前为止,我有一个带有节点和边的图表。节点包含一个 ID 字符串和一个边的 adjacencyList。边包含容量和它通向的节点。
我正在尝试了解维基百科页面上的伪代码以及如何实现它(我正在使用 Java)。这是我目前所理解的:
首先,我将图中所有边的流设置为零。(表示流的好方法是什么?直接在我的图的边中作为变量?)
第二步是创建残差图,这是一个边缘具有残差容量的网络:容量 - 流量(“正常图”中的相应边缘)。然后,您使用此残差图找到从源到汇的路径,并找到沿该路径的最小容量。(这是事情变得非常棘手的地方,我应该为残差图创建一个全新的图,还是应该在原始图中以某种方式表示它?最好的方法是什么?)
重复第 2 步,直到找不到路径,但每次找到路径时,您都执行第 3 步和第 4 步:
对于沿路径的每条边,您添加在步骤 2 中找到的最小值。
对于路径相反方向的每条边,减去步骤 2 中找到的最小值。
第 3 步和第 4 步让我感到困惑,因为我觉得在一个方向上添加和在相反方向减去是一回事。这些加减法是在图中做的吧,不是残差图吗?
真的很感激一些帮助,我已经尝试了几个小时来解决这个问题,但我似乎无法理解它。