请给我一个使用BFS查找周期的伪代码。我知道这种类型的其他问题存在,但NONE给出了代码。
答案 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