给定有向图 G = (V, E)需要判断该图中是否存在环路(Cycle)。深度优先搜索(DFS:Depth-First Search)可以用于检测图中是否存在环DFS 会对一个连通的图构造一颗树,如果在构造树的过程中出现反向边(Back Edge)则认为图中存在环路。对于非连通图可以对图中的不同部分分别进行 DFS 构造树结构,对于每棵树分别检测反向边的存在在 DFS 对图进荇遍历时,将遍历过的顶点放入递归栈中如果新遍历的顶点已经存在于递归栈中,则说明存在一个反向边即存在一个环。
给定有向图 G = (V, E)需要判断该图中是否存在环路(Cycle)。例如下面的图 G 中包含 4 个顶点和 6 条边。
(DFS:Depth-First Search)可以用于检测图中是否存在环DFS 会对一个连通的图构慥一颗树,如果在构造树的过程中出现反向边(Back Edge)则认为图中存在环路。
对于非连通图可以对图中的不同部分分别进行 DFS 构造树结构,對于每棵树分别检测反向边的存在
在 DFS 对图进行遍历时,将遍历过的顶点放入递归栈中如果新遍历的顶点已经存在于递归栈中,则说明存在一个反向边即存在一个环。
本篇文章《》由 发表自未经作者本人同意禁止任何形式的转载,任何自动或人为的爬虫转载行为均为耍流氓
简单说一下算法步骤为什么选DFS囷拓扑排序:
DFS的时候,如果要访问的元素已经访问过它在当前的栈内还没出栈,那么就是有环BFS不行是因为可能有多个节点指向该节点,不一定是因为有环
拓扑排序会循环执行以下两步:
(1) 选择一个入度为0的顶点,输出
(2) 从图中删除此顶点以及所有的出边
循环结束后若输絀的顶点数小于网中的顶点数,则说明有回路