我試圖在有向圖中檢測具有BFS算法的循環。我檢測週期的主要思想是:因爲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
我缺少什麼?
當您想要檢測週期時是否遍歷所有節點? – keyser
從哪裏得到't',因爲它不是簽名過程的一部分BFS(G,v):' –