如何在具体问题上实施Ford-Fulkerson?

问题描述 投票:0回答:1

我正在进行一项特定的练习,但我被困住了。

要解决:

解决流通需求问题。有些工厂生产商品,有些村庄需要运送货物。它们通过道路网络连接,每条道路具有能够流过最大量货物的能力。问题是找到是否有满足需求的流通。这个问题可以转化为最大流量问题。假设每个工厂节点fi具有生产率pi。另外,di是村vi的需求率。您的输入将是使用每个节点的邻接列表给出的图形。最初给出一个描述图的节点数的数字,然后给出每个节点的邻接列表的一行(连同容量),例如: “d a 10 c 5”表示节点d连接到a(容量为10)和c(容量为5)。最后给出每个节点(有工厂的地方)的生产率,然后再给出每个节点上村庄的需求率。

据我所知,我需要一个像这样的输入文件:

10
a b 10 c 20
b c 5 d 10
d e 7 f 8
a 10
e -5

//nodes = 10  
//directed graph -> a to b with capacity 10, a to c with capacity 20  
//a production = 10, e consumption = -5

我已经得出结论,我应该使用Ford-Fulkerson算法来找到最大流量(因为那是所要求的输出)

看看算法的不同实现(我正在考虑使用C或Java对其进行编码),我偶然发现了以下问题:

Ford-Fulkerson仅使用1个源和1个接收器。在这个问题中,我们有测试案例,例如有3个工厂和2个村庄。有人可以启发我,因为我真的被卡住了。

algorithm adjacency-list max-flow ford-fulkerson
1个回答
1
投票

这是1源1接收器Ford-Fulkerson算法的典型扩展。实质上,您将另一个“虚构”节点U视为1源,并将该节点U连接到所有工厂。 (即你问题中的qqxxswpoi来源)

类似地,您将所有K接收器(即村庄)连接到您添加到给定图形的另一个虚构接收器节点M。然后,当您计算从VU的最大流量时,您将计算从所有工厂到所有村庄的最大流量。

显然,应该考虑将U连接到工厂的边缘和连接村庄与V的边缘的权重。在您的情况下,从V到工厂的每个进入边缘的重量应该等于该工厂的容量。如果边缘将村庄连接到U,则不需要有界限,因此它可以与整个图形中的最高权重一样高,或者可以表示无穷大的实际值。

© www.soinside.com 2019 - 2024. All rights reserved.