【问题标题】:Find edge-disjoint paths (not the number, the paths)查找边缘不相交的路径(不是数字,路径)
【发布时间】:2016-12-19 16:36:26
【问题描述】:

给定一个有向图,我们可以使用 edmonds-karp 或 ford-fulkerson 算法来找到有向图中的最大边不相交路径数。

假设 G 中有 k 条边不相交的路径,如何在多项式时间内找到实际路径?我最好的选择是 BFS,一旦找到路径,将这些边缘标记为已使用。

非常感谢!

【问题讨论】:

  • 您是将 BFS 应用于原始图,还是仅应用于由非零流边缘形成的受限图?

标签: algorithm graph flow directed-graph network-flow


【解决方案1】:

您可以使用流分解。它是这样的:

  1. 让我们从起始节点运行深度优先搜索,并忽略流为零或负流的边。

  2. 到达终端节点后,从通过从起始节点到终端节点的路径上的所有边的流中减去 1 并打印它们(它们形成路径)。

  3. 只要终端节点可达,就一直这样做。

每次运行都使用多项式时间,并从图中找到并删除一条路径。不相交路径的数量显然是多项式的,因此该算法具有多项式时间复杂度。

您也可以使用广度优先搜索(您仍然需要忽略非正流的边)。

【讨论】:

  • 我明白了,所以诀窍是对返回的流使用搜索算法?非常感谢!
  • @Ruben 是的。您需要使用流程。
  • @kraskevich 你好!我正在尝试解决这个问题,而我发现的关于这个主题的所有内容都有一个我无法理解的“漏洞”。那么,我应该在哪个图中运行 DFS?来自最大流或原始图的残差图?如何治疗周期?提前致谢。
  • @Marco 您只需要使用那些具有正流的边缘。循环并不重要,因为 DFS 总能找到简单的路径。
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 2017-06-13
  • 2016-08-22
相关资源
最近更新 更多