我试图在有向图中用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/

10-11 20:38