我有一个上下限的流程图,我的任务是尽快找到任何可行的解决方案。我发现了用于最大/最小流量的许多算法和方法,等等(也很多时候使用可行的解决方案作为起点),但是对于任何可行的解决方案都没有特定的要求。是否有专门针对它且快速的算法/方法?
最佳答案
所以我终于有时间总结一下。我使用的解决方案是获取初始图形并在这些步骤中对其进行转换。
(权重按此顺序排列:下限,电流,上限。)
1.通过(0,0,infinity)的边将t连接到s。
2.到每个节点
初始图的余额值等于:(
传入边缘-传出边缘的下限之和)。
3.设置上
每个边缘的边界(上限-下限)。设定下限
每个边的电流为0。
4.现在创建新的s(s')和新的t(t'),这将是我们的新起点和终点(不要删除图中已经存在的s和t,它们变成了
正常节点)。
5.创建从s'到具有(0,
0,vertex.balance)边界。
6.从具有负平衡的每个顶点到('0,
0,abs(vertex.balance))。
7.运行Ford-Fulkerson(或您选择的其他最大流量算法)
在新图表上。
8.对于初始图的每个边,
转换之前具有初始旧下限的边缘,您就拥有了
初始图的每个边的初始流。
实际上,此问题比提供可行流量时最大化流量要难一些。