使用BFS查找两个节点之间的所有路径

时间:2013-07-17 00:47:58

标签: algorithm path breadth-first-search

是否有可能在多项式时间内找到从s到t(s,t是顶点)的所有可能路径?如果它是一个可能的算法呢?

1 个答案:

答案 0 :(得分:0)

在多项式时间内,可以枚举图中所有那些可以成为从s到t的路径的一部分的节点和边。例如,在图表中

s --> a --> t
       \
        \--> b

这些节点是{a},因为没有从s到t的路径经过b。

还可以枚举必须任何上的那些节点和边缘 在多项式时间内从s到t的路径。

只要在多项式时间内不允许循环,您也可以计算从s到t的路径数;例如,当图形是非循环的或者放入限制时,您只计算不包含循环的路径,在多项式时间内。

但是你不能在多项式时间内明确地枚举从s到t的所有非循环路径,因为它们可以指数多个。即使在非循环图中,例如

   o   o   o         o
  / \ / \ / \       / \
 s   o   o   o ... o   t
  \ / \ / \ /       \ /
   o   o   o         o

假设图形从左到右是方向性的;如果其中有n个钻石,则从s到t有2个 n 路径。

从s到t找到最长的路径是NP-hard,即没有多项式算法。

从s到t计算非相交路径的最大数量也是NP难的,也就是说,如果要枚举从s到t的一组路径,那么就没有了集合中任意两条路径之间的公共边缘。