0
我有一个有向图,例如n×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
我有一个有向图,例如n×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
你应该寻找基本循环,其中没有顶点(除了开始/结束)出现不止一次。在那种情况下,存在线性时间算法(线性节点+边)。例如,请参阅http://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF。这来自第二个答案Finding all cycles in a directed graph,这比第一个恕我直言更好。
那么你的问题到底是什么? – ChriPf
我想要算法或逻辑或代码来找到周期中涉及的顶点列表 – user3035457
这是不可能的多时间,因为如果它是那么你可以解决在多时间哈密顿路径问题,并且这个问题是NP完全问题。更简单地说,可能的周期数是巨大的,所以这在多项式时间中是不可能的。你可能会蛮力的(递归地尝试所有的路径)并记录回到源代码并打印出来。有点像DFS,除了你可以多次访问一个节点。不过,即使略微合理的尺寸图也需要很长时间,而且我不确定是否有更快的方法。 – Jimmy