我在理解Ford-Fulkerson算法以查找最大流量方面遇到一些麻烦,希望能有所帮助。
如果我们用源A和接收器F查看下面的图形,其中边缘容量在每个边缘上列出。
您会注意到,节点B和C具有双向边缘,B-C的容量为8,C-B的容量为3。
现在,假设找到的第一个路径是瓶颈容量为8的A-B-C-F。因此,我们在创建此图的路径上推8个流:
现在让我们说下一个路径是A-C-B-D-F。
我的问题是,我们现在能够推动C-B流动多少?是使用8个已推入的流量加上11的另一边的容量,得出11个,还是3个或可能是8个?
谢谢您的时间。
答案 0 :(得分:0)
我认为您错误地构造了第二个残差图。这是我从第一张图准备的版本。
每当将流传递到扩充路径时,都需要随之调整容量。因此,当您沿着路径A-B-C-F传递值为8的流时,需要在将下一个流传递到图形之前调整关联边的容量。
因此,值8来自边缘B-C或C-F的瓶颈容量。由于您在这两个边缘上通过了最大流量,因此不能超过8个,因此您已最大限度地利用了这些边缘的容量。这可以概括为这样的想法:每当您使用某些边缘传递一些流量时,都需要绘制后向边缘,并用流量值加上后向边缘的容量并从前向边缘减去流量值。
您可以从第二张图表的我的版本中看到这一点。由于B-C不再具有承载更多流量的能力(8-8 = 0),因此我省略了边缘,并将容量添加到反向边缘(即C-B,其中容量增加到3 + 8 = 11)。 C-F也发生了同样的事情。
现在对于A-B,由于我们已经通过了8以及容量为10的路径,所以我们仍然还有2个容量来传递更多的流量。因此,我们从A-B中减去该值并得到(10-8 = 2)。我们还添加了反向边B-A,该边正添加流量值(即0 + 8 = 8)创建。
现在,由于我们正确构建了残差图,因此剩下的唯一可以承载来自A-F的流量的增广路径就是流量值为2(瓶颈容量为2)的A-B-D-F。
因此,最大流量值(总流量值)为8 + 2 = 10
希望有帮助!