我正在尝试在有向图中使用 BFS 算法检测循环。我检测周期的主要想法是:由于 BFS 只访问每个节点(和边缘)一次,如果我再次遇到已经访问过的节点;它会导致一个循环。但是,我的代码有时会找到循环,有时不会。
我从维基百科修改的伪代码如下:
1 procedure BFS(G,v):
2 create a queue Q
3 enqueue v onto Q
4 mark v
5 while Q is not empty:
6 t <- Q.dequeue()
7 if t is what we are looking for:
8 return t
9 for all edges e in G.adjacentEdges(t) do
12 u <- G.adjacentVertex(t,e)
13 if u is not marked:
14 mark u
15 enqueue u onto Q
16 else:
17 print "Cycle detected!" //since we saw this node before
我错过了什么?