我已尝试使用Tarjan的算法进行周期检测,其实现来自http://learn.yancyparedes.net/2012/03/strongly-connected-components-using-tarjans-algorithm/。
以下图表用于测试:
a b
a c
b a
b c
c d
d a
作为输出,我得到以下结果:设置0:[c,b,a,d]
我的问题是我需要所有周期,所以我在这个结果中缺少集合[a,b]和[a,c,d]。 你现在有没有办法修改实现以获得所有周期?或者是否存在针对此问题的其他算法?
谢谢!
答案 0 :(得分:2)
Tarjan的算法找不到所有周期。它找到所有强连接的组件,这不是一回事。在一般情况下不可能有效地找到所有循环(对于完整的图,输出的大小是指数的。而且,只是找到最长的循环已经是NP难的)。当然,你可以使用回溯。