簡體   English   中英

我的DFS無法處理簡單的圖形[Python]

[英]My DFS can't handle simple graph [Python]

下面是我的DFS [深度優先搜索]的代碼,我的代碼可以處理復雜的圖形,但是無法處理簡單的圖形,就像我給出的圖形一樣,所以我的問題是如何解決它? 我是遞歸地做的。 任何形式的幫助表示贊賞。

graph = { 'A' : ['B','S']}

def dfs(graph,start_node,visited):
    if start_node:
        if start_node not in visited:
            visited.append(start_node)
            for node in graph[start_node]:
                  dfs(graph,node,visited)
    else:
        return visited
    return visited

visited=dfs(graph,"A",[])
print(visited)

你是如何表示圖表的? 如果它是標准圖形(具有雙向邊緣),表示為由其中值為相鄰節點列表的節點鍵入的字典,那么您的“圖形”根本不是圖形,因為它缺少'B''S' 但是,為什么你用它作為測試用例呢? 這種輸入唯一相關的問題是,如果你想測試你的代碼是否優雅地對它們進行測試(你的代碼沒有 - 但正確的錯誤處理與你的問題相關)。

另一方面,如果這些是有向圖,那么您的示例是有意義的(將值解釋為對應於傳出邊,而鍵是具有傳出邊的節點)。 但在這種情況下,您無法處理終端節點。 您可以在遞歸之前顯式檢查節點是否在字典中,或者將終端節點的直接可達節點列表視為隱式[]並在這些情況下使用字典get()方法返回它:

def dfs(graph,start_node,visited):
    if start_node:
        if start_node not in visited:
            visited.append(start_node)
            for node in graph.get(start_node,[]):
                  dfs(graph,node,visited)
    else:
        return visited
    return visited

這將按預期工作,打印['A', 'B', 'S']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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