最大二分匹配(ford-fulkerson)

时间:2014-03-30 17:13:45

标签: algorithm max-flow ford-fulkerson

我正在阅读http://www.geeksforgeeks.org/maximum-bipartite-matching/http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm,但我很难理解。似乎这个例子假设每个工作只能接受1个人,每个人想要1个工作。我想知道如果例如v set具有容量>算法/代码将如何改变。 1(可以为该工作雇用多人)和你的设置> 1(每个人想要超过1份工作)?

1 个答案:

答案 0 :(得分:8)

要允许作业分配多个人,您只需修改JobsTerminal的边距容量(类似于Niklas B.在{{3}中所述的方式) },但不完全是。)

像这样:

Flow network

SourcePeople以及从PeopleJobs的1的容量保证只会为一项工作选择一个人(因为他们可以贡献的最大流量是1)。但是,从> 1Jobs的容量Terminal允许可以为该作业分配多个人。

如果一个人也可以执行多于一项的工作,那么从SourcePerson的最大流量会增加该数量:

Another flow network

其中ijkx是值为>= 1

的整数的替代值

这里要记住的关键是People左侧的流量指示他们可以采取多少工作,而Jobs右侧的流量指示可以分配多少人那份工作。中间的能力不应该改变。