Graph 来自每个节点的DFS会给出有向图中的所有循环吗

Graph 来自每个节点的DFS会给出有向图中的所有循环吗,graph,graph-theory,directed-graph,depth-first-search,Graph,Graph Theory,Directed Graph,Depth First Search,我想找到有向图中的所有圈。从一个节点开始深度优先搜索将找到一些循环查找后边缘。因此,我将dfs应用于graphi.e中的所有节点。每次根节点都是不同的节点。 通过消除重复的循环,我可以用这个方法得到所有的循环。但是,我不确定这是否适用于所有图形,也不确定这是否是正确的方法。 有人能告诉我这是否适用于所有情况吗 谢谢如果已断开节点连接,则图形未连接,则必须从每个节点遍历图形。如果您使用DFS或BFS,这无关紧要,因为您不会在找到特定节点时停止遍历 我会保留一个全局访问节点列表,这样您就不必从已访问

我想找到有向图中的所有圈。从一个节点开始深度优先搜索将找到一些循环查找后边缘。因此,我将dfs应用于graphi.e中的所有节点。每次根节点都是不同的节点。 通过消除重复的循环,我可以用这个方法得到所有的循环。但是,我不确定这是否适用于所有图形,也不确定这是否是正确的方法。 有人能告诉我这是否适用于所有情况吗


谢谢

如果已断开节点连接,则图形未连接,则必须从每个节点遍历图形。如果您使用DFS或BFS,这无关紧要,因为您不会在找到特定节点时停止遍历

我会保留一个全局访问节点列表,这样您就不必从已访问的节点执行完整的遍历,而不必使用通常的每路径祖先列表来避免循环。

答案是否定的!因为在所有节点上运行DFS表示多项式时间算法。在有向图中没有多项式时间算法来寻找所有的圈


考虑这种情况,假设您有一个包含n个节点的完整图,每个节点指向所有剩余节点,那么这n个节点的每个非空子集表示一个循环。这样的子集有2^n-1个,因此无法在多项式时间内找到指数数量的循环。

您必须非常小心,因为循环是前向、交叉、后向和树边的组合,编写处理所有可能性的解决方案并非易事。我一直在研究这种方法,最后将其留给了另一种解决方案,我已经用php编写了代码,请检查这里: