簡體   English   中英

如何使用 DFS 正確檢測循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM