流网络 - 找到从给定源顶点到某个顶点t的路径数

时间:2012-01-30 08:07:07

标签: computer-science graph-theory

我被赋予了一个编写算法的任务,该算法找到从s到t的路径数,由不同的顶点组成。

为例: 考虑有向图G =(V,E): enter image description here

在给定的例子中,答案是2,一个s,v,t或s,u,v,t和另一个s,x,t

我看到了这个问题的解决方案: 制作流网络图G'如下: enter image description here

其中形式(i,i')的弧的容量= 1(i是某个顶点)和 形式(i',j)的弧形容量=无穷大

他们说在G'上运行Edmonds Karp算法会输出想要的流量。

现在我似乎无法理解这是如何解决这个问题的,我的意思是如果在第一次迭代中edmonds karp会意外地改善路径s,u,u',v,v',x,x'的流量,t - 在这种情况下如何解决?

非常感谢。

1 个答案:

答案 0 :(得分:1)

网络流量如何与原始问题相同:

=> 如果有 n 路径,则会产生 n

的流量

< = 如果有一个大小 n 的流,那么非零流的边形成 n 路径,每个顶点都会被使用至多一次,因为i-> i'的容量为1(并且没有边缘离开i或在i'结束)

不会被赋予i-> j边缘的无限容量分心,它也可能是1而不改变任何

对于整个算法的描述,你应该参考一些文献,比如this one,但是你写的路径不会因为它的长度而被选中。 Edmonds-Karp算法以最短的路径开始。

现在,(忽略这个事实),你可能会对这样一条路径“阻挡”另外两条路径这一事实感到困惑。如果先前的迭代选择了这样的路径(或路径的组合),仍然会有一个扩充路径,它将使用前一路径的一部分向后(sx-v'-t)例子)。