问题:
设G =(V,E)是n> = 3个具有m个边的顶点的有向图。顶点集V包括三个 特殊顶点a,v和b。如果存在,则通过v找到从a到b的简单路径。 (简单路径是没有重复顶点的路径。)
我相信这个问题应该/可以通过Max Flow算法解决,但我不知道如何。它让我想起了Max Flow算法,它有多个源,边缘有容量1.任何人都知道如何将问题简化为最大流算法?
如果我将顶点b设置为接收器,我无法确定它是否包含v。如果我将v设置为接收器,当达到v时如何继续?
答案 0 :(得分:2)
以下内容应该有效:
查找从a
到v
的所有最小路径,不包含顶点b
。您可以通过(例如)没有顶点b
的图形上的DFS来获取这些。我们说a-v
- 路径p
是最小的,如果没有其他a-v
- 路径p'
只包含来自p
的顶点。
对于每个最小a-v
- 路径,尝试查找从v
到b
忽略已经属于a-v
- 路径的顶点的路径。如果你发现了这样的事情,你就完成了。
备注:请注意,路径的数量可能呈指数级增长,但正如我在评论中指出的那样,至少这个问题的通用版本似乎可以简化为TSP,因此很可能非常困难。
答案 1 :(得分:1)
这相当于询问图形是否包含与具有三个顶点的有向路径同胚的子图形(图形是来自输入图形的某些顶点上的图形,并且子图形对于图形的同构,如果边缘pattern可以映射到子图的简单,成对顶点不相交路径。 Fortune, Hopcroft, and Wyllie已经证明,有针对性的子图同胚对几乎所有固定模式都是NP难的,包括这个。因此,问题是NP难,并且除非P = NP,否则无法通过流技术解决。
虽然将a和b作为源和v是接收器,但是无向版本可以减少到最大流量。