如何使用深度优先搜索(DFS)在有向图中检测多个重叠周期?

时间:2018-05-31 12:42:18

标签: java algorithm depth-first-search cycle directed-graph

具有重叠周期的定向图的图像

enter image description here

总共有8个周期需要检测: -

1-2-3-4-5-1
1-2-3-6-5-1
1-2-7-6-5-1
1-2-7-4-5-1

1-8-7-6-5-1
1-8-7-4-5-1
1-8-3-4-5-1
1-8-3-6-5-1

我理解如何使用WHITE,GRAY和BLACK SETS以及布尔访问数组/堆栈,但我仍在努力使用逻辑。非常感谢任何帮助,我不需要详细描述如何编码,只是如何工作算法(修改DFS)和伪代码。再次感谢您抽出宝贵时间。

1 个答案:

答案 0 :(得分:0)

检测有向图中的循环的关键是灰色(这意味着正在探索节点及其邻居)。
如果其中一个邻居与灰色节点有另一个连接,则您有一个周期。
因此,如果被探索的节点具有灰色邻居,则您有一个循环。
换句话说,如果在探索所有邻居之前重新访问某个节点,那么就有一个循环。