我被赋予了一个编写算法的任务,该算法找到从s到t的路径数,由不同的顶点组成。
为例: 考虑有向图G =(V,E):
在给定的例子中,答案是2,一个s,v,t或s,u,v,t和另一个s,x,t
我看到了这个问题的解决方案: 制作流网络图G'如下:
其中形式(i,i')的弧的容量= 1(i是某个顶点)和 形式(i',j)的弧形容量=无穷大
他们说在G'上运行Edmonds Karp算法会输出想要的流量。现在我似乎无法理解这是如何解决这个问题的,我的意思是如果在第一次迭代中edmonds karp会意外地改善路径s,u,u',v,v',x,x'的流量,t - 在这种情况下如何解决?
非常感谢。
答案 0 :(得分:1)
网络流量如何与原始问题相同:
=> 如果有 n 路径,则会产生 n
的流量< = 如果有一个大小 n 的流,那么非零流的边形成 n 路径,每个顶点都会被使用至多一次,因为i-> i'的容量为1(并且没有边缘离开i或在i'结束)
不会被赋予i-> j边缘的无限容量分心,它也可能是1而不改变任何
对于整个算法的描述,你应该参考一些文献,比如this one,但是你写的路径不会因为它的长度而被选中。 Edmonds-Karp算法以最短的路径开始。
现在,(忽略这个事实),你可能会对这样一条路径“阻挡”另外两条路径这一事实感到困惑。如果先前的迭代选择了这样的路径(或路径的组合),仍然会有一个扩充路径,它将使用前一路径的一部分向后(sx-v'-t)例子)。