【问题标题】:Find all vertices in a cycle in a directed graph在有向图中找到一个循环中的所有顶点
【发布时间】:2015-06-24 08:23:44
【问题描述】:

我有一个有向图,即 n x n 阶矩阵。
我需要找到其中存在的所有循环以及循环中涉及的顶点。

这是一个例子:

 A B C D    
 0 1 1 1    
 1 0 1 0    
 1 0 0 0    
 1 0 0 0    

输出应该类似于:

 No.of cycles found : 4  
 A->B->A  
 A->B->C->A
 A->C->A
 A->D->A

【问题讨论】:

  • 那么你的问题到底是什么?
  • 我想要算法或逻辑或代码找到循环中涉及的顶点列表
  • 这在多时间中是不可能的,因为如果是这样,那么您可以在多时间内解决哈密顿路径问题,并且该问题是 NP 完全的。更简单地说,可能的循环数是巨大的,所以这在多项式时间内是不可能的。你不妨蛮力它(递归地尝试所有路径)并记录哪些返回到源并打印它们。有点像 DFS,除了你可以多次访问一个节点。不过,对于尺寸稍微合理的图表,这将花费大量时间,而且我不确定是否有更快的方法。

标签: graph cycle-detection


【解决方案1】:

您应该寻找基本循环,其中没有顶点(开始/结束除外)出现多次。在这种情况下,有线性时间算法(节点+边线性)。例如,请参阅http://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF。这来自Finding all cycles in a directed graph 的第二个答案,比第一个恕我直言要好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2010-10-07
    • 2021-08-04
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多