Graph 在有向图中查找循环中的所有顶点

Graph 在有向图中查找循环中的所有顶点,graph,cycle-detection,Graph,Cycle Detection,我有一个有向图,即阶数为nxn的矩阵。 我需要找到它中存在的所有循环以及循环中涉及的顶点 以下是一个例子: 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 您应该寻找基本循环,其中没有顶点(开始/结束除外)出现

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

以下是一个例子:

 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,只是您可以多次访问节点。但是,对于大小稍微合理的图形,这将花费大量时间,我不确定是否有更快的方法