深度优先遍历(DFS)判断回路的核心方法是:通过维护节点的访问状态(未访问、访问中、已访问),在递归过程中若遇到“访问中”的邻接节点,则判定存在回路。 这一方法适用于有向图和无向图,但需注意无向图中需排除父节点的误判。
-
状态标记法
为每个节点定义三种状态:未访问(白色)、访问中(灰色)、已访问(黑色)。DFS递归时,若发现邻接节点为灰色,说明存在反向边(即回路)。例如,有向图中若节点A的DFS路径中再次遇到A,则形成环。 -
无向图的特殊处理
无向图需额外记录父节点,避免将“父→子→父”误判为回路。DFS遍历时,若遇到已访问的非父节点,则判定为环。例如,节点B的邻接节点A若已访问且非B的父节点,则A-B形成环。 -
算法实现要点
- 使用邻接表或矩阵存储图结构。
- 递归或栈实现DFS,实时更新节点状态。
- 有向图无需排除父节点,但需确保状态回溯(递归返回时标记为已访问)。
-
复杂度与优化
DFS判环的时间复杂度为(V为顶点数,E为边数)。对于大规模图,可结合并查集(无向图)或拓扑排序(有向图)进一步优化。
总结:DFS通过状态标记高效检测回路,关键在于正确处理邻接节点的状态和父子关系。实际应用中需根据图类型(有向/无向)调整逻辑,并结合具体场景选择优化方案。