我有一个上下限的流程图,我的任务是尽快找到任何可行的解决方案。我发现了用于最大/最小流量的许多算法和方法,等等(也很多时候使用可行的解决方案作为起点),但是对于任何可行的解决方案都没有特定的要求。是否有专门针对它且快速的算法/方法?

最佳答案

所以我终于有时间总结一下。我使用的解决方案是获取初始图形并在这些步骤中对其进行转换。

(权重按此顺序排列:下限,电流,上限。)

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.对于初始图的每个边,
        转换之前具有初始旧下限的边缘,您就拥有了
        初始图的每个边的初始流。

实际上,此问题比提供可行流量时最大化流量要难一些。

09-07 08:06