在有向图中找到简单循环


15

对我来说,这个问题看起来很有趣。它将在有向图中找到一个简单的循环(即没有重复节点的循环)。

我的解决方案是这样的,即此图是一个案例问题: 在此处输入图片说明

我知道图形中有一个循环,当您可以在深度优先搜索中找到“后边缘”时(在DFSTree的图片中虚线了),我可以确定几个循环,但不能确定所有,简单的周期。因为,有向植物非常重要,所以从一个周期开始,即(0123)!=(0321)

我正在考虑为每个具有后端的节点创建dfs,但是我不确定,目前尚不清楚。所以,我问你,如果你指导我。谢谢!。 在此处输入图片说明

这是我针对案例问题的简单循环计数。

在此处输入图片说明 在此处输入图片说明在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明


Answers:


13

这个问题似乎非常适合Google查询。例如,您可能对本文介绍的算法感兴趣:

查找有向图的所有基本电路。唐纳德·B·约翰逊。暹罗计算机 卷 4,第1号,1975年3月

抽象。提出了一种算法,该算法可以找到有向图的所有基本电路,该有向图的时间范围O((n + e)(c + 1))O(n + e),其中有n顶点,e边线和c基本电路。该算法类似于Tiernan和Tarjan的算法,但是速度更快,因为它在任何一个电路与输出序列中的下一个电路之间最多考虑两次边沿。

本文包含一个完整的算法。


好。纸是完美的,但是我可以继续工作还是看一下纸?我正在寻找您向我介绍解决方案,我的想法忘记了什么?
jonaprieto

2
您的主要问题是dfs树不是唯一的(例如,图中的“ 1”与“ 3”交换)。您将需要查看所有可能的dfs树以枚举所有周期。
badroit

1
如果您需要此算法的Java实现:github.com/1123/johnson
user152468

@badroit链接已损坏... :(
Jorge

@lalongooo,谢谢,我替换了它。
badroit '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.