在具有邻接表(数据结构)的图中查找循环

Finding loops in graph having an adjacency list (data structure)

我正在尝试查看有向图(或实际上是多个图)是否有循环。 我有一个如下所示的邻接列表:

1: [4]
4: [5]
5: [6]
9: [10]
10: [11]
11: [12]
12: [13]
13: [10]

我能够创建算法来查找图形是否有循环并且它正在工作,但我现在卡住了,因为它在该列表上不起作用,因为该邻接列表上有 2 个断开连接的图形。

所以我的问题是如何找到邻接表中有多少个图来单独处理它们,或者是否有更好的方法来处理这个问题,我的唯一目的是找出任何一个中是否存在循环列表中可能的图表,只有 true/false.

算法

让我们在图中执行一系列深度优先搜索。那些。从我们从未访问过的每个顶点开始,我们将启动深度优先搜索,它将在进入顶点时将其绘制为灰色,在退出时将其绘制为黑色。而如果深度优先搜索试图去到灰色顶点,则意味着我们找到了一个循环(如果图是无向的,那么深度优先搜索从某个顶点试图去祖先的情况不是计)。 循环本身可以通过遍历祖先数组来恢复。

Here你会找到一个相当清晰和好的解决方案。