我想在有向图中找到所有周期。从一个节点开始深度优先搜索将找到一些周期(找到后边缘)。因此,我将dfs应用于图中的所有节点(即,每次根是不同的节点)。 我能够使用它来获得所有循环(通过消除重复的循环)。但是,我不确定这是否适用于所有图表以及这是否是正确的方法。 任何人都可以建议我这是否适用于所有情况。
由于
答案 0 :(得分:0)
如果您已断开节点(图形未连接),则必须从每个节点遍历图形。如果您使用DFS或BFS并不重要,因为您在找到特定节点时没有停止遍历。
我会保留一个全局的VisitedNodes列表,这样您就不必从已访问过的节点进行完全遍历,而不是通常的“Per-Path”祖先列表来避免循环。
答案 1 :(得分:0)
答案是否!因为在所有节点上运行DFS表示多项式时间算法。并且没有多项式时间算法来查找有向图中的所有周期。
考虑这种情况,假设你有一个包含n个节点的完整图形(每个节点都指向所有其余节点),那么这n个节点的每个非空子集都表示一个循环。有2 ^ n -1个这样的子集,所以无法在多项式时间内找到指数个周期。