graph-algorithm - BFS循环检测

标签 graph-algorithm pseudocode breadth-first-search cycle-detection

有人可以提供使用 BFS 来搜索有向/无向图中的循环的分步伪代码吗?

它的复杂度可以达到 O(|V|+|E|) 吗?

到目前为止我只看到了 DFS 实现。

最佳答案

您可以采用非递归 DFS 算法来检测无向图中的循环,其中用队列替换节点的堆栈以获得 BFS 算法。很简单:

q <- new queue // for DFS you use just a stack
append the start node of n in q
while q is not empty do
    n <- remove first element of q
    if n is visited
        output 'Hurray, I found a cycle'
    mark n as visited
    for each edge (n, m) in E do
        append m to q

由于 BFS 仅访问每个节点和每条边一次,因此复杂度为 O(|V|+|E|)。

关于graph-algorithm - BFS循环检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41936718/

相关文章:

algorithm - 具有特定密度的点的最大子集

algorithm - 解释伪代码算法 - 中间或之后

algorithm - 通过从不生成排列及其逆排列来生成所有排列的一半?

javascript - 如何计算相对百分比(将分数应用于新范围)?

java - 有效实现广度优先算法的动态队列

java - 我对 Node 类的引用中的类型转换

java - 用户输入显示最短路径

c# - 维护和刷新二维绘图中的连接

algorithm - O(m+n) 算法检查有向图是否单边连通

java - 使用Python查找图中两个顶点(节点)之间的所有路径