Tarjan的循环检测:缺少循环

时间:2015-01-15 13:13:30

标签: java algorithm graph cycle cycle-detection

我已尝试使用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]。 你现在有没有办法修改实现以获得所有周期?或者是否存在针对此问题的其他算法?

谢谢!

1 个答案:

答案 0 :(得分:2)

Tarjan的算法找不到所有周期。它找到所有强连接的组件,这不是一回事。在一般情况下不可能有效地找到所有循环(对于完整的图,输出的大小是指数的。而且,只是找到最长的循环已经是NP难的)。当然,你可以使用回溯。