我想解决的问题如下:
给定有向图,找到“覆盖”整个图形的最小路径数。多条路径可能经过相同的顶点,但路径的并集应该都是它们的全部。
对于给定的样本图(见图),结果应为2(1-> 2-> 4,并且1-> 2-> 3足够)。
通过分割顶点并为连接顶点到外顶点的每条边分配下限1,并将源链接到每个顶点和每个外顶点到接收器(它们不是如图所示,因为它会使整个事情变得混乱),现在的问题是如何在图中找到最小流量,并使用下限约束。
但是,我已经读过为了解决这个问题,我必须找到一个可行的流程,然后按如下方式分配容量:C(e)= F(e) - L(e)。但是,通过为每个Source-vertex边缘,vertex-Sink边缘和In-Out边缘分配流量1,可行流程是正确的,并且总流量等于顶点数量。但是通过分配新的容量,输入边缘(标记为蓝色)的容量为0(它们的下限为1,在我们选择可行流量时,它们的流量为1),并且没有流动是可能的。
图。 2:我如何选择“可行流程”
然而,从图中你可以清楚地看到你可以指示一个2流,它足以满足每个“顶点边缘”的下限。
我是否理解最小流量算法错误?错误在哪里?!
答案 0 :(得分:0)
一旦你有了可行的流量,你需要通过将流从水槽返回到源来开始“修剪”它,受限于下限和容量限制(实际上只是剩余容量)。为此,在向前方向使用较低的两个黑色边缘,因为它们尚未在它们上方流动。涉及源和接收器的边缘反过来使用,因为我们正在撤消已经存在的流量。如果你从剩余容量方面开始考虑所有这些,那就更有意义了。