[英]How to correctly detect cycle using DFS?
這是我在圖中檢測循環的代碼:
seen = set()
def check(table,node):
seen.add(node)
#traverse all neighors of the current node
for neigh in table[node]:
print(neigh, seen)
if neigh not in seen:
check(table,neigh)
else:
return False
return True
table1 = {'A':['B'],'B':['A']}
print(check(table1,'A'))
為什么它總是返回 True? 即使存在循環,else 子句也不會執行。 我錯過了什么嗎? 謝謝!
我認為問題在於您需要返回遞歸調用以check
(在 if 語句之后)使您的代碼看起來像:
seen = set()
def check(table,node):
seen.add(node)
#traverse all neighors of the current node
for neigh in table[node]:
print(neigh, seen)
if neigh not in seen:
return check(table,neigh)
else:
return False
return True
table1 = {'A':['B'],'B':['A']}
print(check(table1,'A'))
您的原始代碼會發生什么情況是您使用節點“B”遞歸調用 check,它返回 false,但您不對該返回值執行任何操作,因此在頂層它退出 for 循環並向用戶返回 true。 希望這可以幫助你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.