如何在图中找到所有顶点不相交的路径?

时间:2012-03-23 02:48:47

标签: algorithm matlab graph-theory shortest-path

假设图中有3个目标节点。

顶点不相交路径意味着在路径期间除了端节点之外没有任何相同的节点。

对于任何一个节点,比如节点i,如何找到从节点i到三个目标节点的所有顶点不相交路径?

1 个答案:

答案 0 :(得分:17)

您可以通过在适当构造的图形中将其减少到最大流量问题来解决此问题。这个想法如下:

  1. 将图表中的每个节点v拆分为节点:中的v 和v out
  2. 对于每个节点v,将容量的边缘从中的v 添加到v out
  3. 将图中的相邻边(u,v)替换为u out 的边缘到容量1的中的v
  4. 添加新的专用目标节点t。
  5. 对于每个目标节点v,将< in 中的边添加到容量为1的t。
  6. 从s out 中找到最大流量到t。流的值是节点不相交路径的数量。
  7. 这种结构背后的想法如下。从起始节点s到目标节点t的任何流路径必须具有容量1,因为所有边都具有容量1。由于所有容量都是积分的,因此存在积分最大流量。没有两个流路径可以通过相同的中间节点,因为在通过图中的节点时,流路径必须越过边缘从中的v 到v out ,并且这里的容量仅限于一个。此外,此流路径必须在您已识别的三个特殊节点之一处结束,然后在该节点的边缘之后到达t。因此,每个流路径表示从源节点s到三个目的节点之一的节点不相交路径。因此,这里计算最大流量对应于找到可以从s到三个目的地中的任何一个的节点不相交路径的最大数量。

    希望这有帮助!