伪代码使用广度优先搜索在图中查找循环

时间:2010-12-16 18:52:28

标签: algorithm data-structures graph

请给我一个使用BFS查找周期的伪代码。我知道这种类型的其他问题存在,但NONE给出了代码。

2 个答案:

答案 0 :(得分:4)

以防万一,DFS更适合任务,在有向图中更是如此。如果您已经知道,请忽略这一点。

对于伪代码,嗯,在无向图中,它是传统的BFS,它会中止并报告当它到达之前标记为已访问的节点时发现的循环。您可以找到BFS here的伪代码。

在有向图中,它变得更加棘手,因为你必须记住当你到达节点时你走的是哪条路,而且与DFS相比空间复杂性的劣势变得更加糟糕。

编辑:哦,我在谈论测试周期图,而不是实际找到周期。使用DFS查找周期几乎是微不足道的,而使用BFS查找周期在实际算法复杂性和代码复杂性方面要复杂得多。这就是你找不到伪代码的原因。

答案 1 :(得分:0)

你可能意味着DFS,这在循环检测中更为常见,所以我假设你犯了这个错误。尽管核心思想保持不变,但改用BFS相当容易。

func detectCycle()
  for node in graph:
    visited = bool[N]
    set all visited to false
    detectCycle(n, n, visited)

func detectCycle(n, origin, visited)
  for neighbour in graph[n]
    if neighbour == origin
       cycle detected
    if not visited[neighbour]
       visited[neighbour] = true
       detectCycle(neighbour, visited)
       visited[neighbour] = false