我试图在有向图中用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
我错过了什么?
最佳答案
您给出的算法可能会在找到循环之前找到目标节点(因此退出)。
哪一个对你更重要:尽快找到目标还是找到循环?如果你根本不关心目标,你可以删除算法的那一部分。
关于algorithm - 使用BFS进行周期检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14508814/