13. 下列 Python 程式碼片段產生什麼結果?
(A) 節點 'A' 的所有鄰居
(B) 節點 'A' 可以到達的所有節點
(C) 圖中所有的節點
(D) 節點 'A' 及其直接鄰居
答案:登入後查看
統計: A(14), B(51), C(11), D(15), E(0) #3233459
統計: A(14), B(51), C(11), D(15), E(0) #3233459
詳解 (共 2 筆)
#6420146
好的,這段 Python 程式碼是關於深度優先搜尋 (Depth First Search, DFS) 演算法的實作。
程式碼解釋如下:
-
def dfs(graph, start, visited=None):
- 定義了一個名為 dfs 的函式,用於執行深度優先搜尋。
- graph: 代表要搜尋的圖,這裡使用 Python 字典來表示,字典的鍵是節點,值是一個列表,包含與該節點相鄰的所有鄰居節點(這是一種稱為「鄰接列表」的圖表示方法)。
- start: 代表開始進行搜尋的節點。
- visited=None: 這是用來記錄已經訪問過的節點集合。None 是預設值,表示在第一次呼叫函式時,如果沒有傳入 visited 集合,就會在函式內部初始化一個空的集合。
-
if visited is None:
- 檢查 visited 集合是否為 None。這通常發生在對 DFS 函式的第一次呼叫時。
-
visited = set()
- 如果 visited 是 None,則建立一個空的集合 (set)。集合用於存放已訪問的節點,因為集合查詢(in 運算子)非常快速。
-
visited.add(start)
- 將當前正在訪問的 start 節點加入到 visited 集合中,標記它為已訪問。
-
for neighbor in graph[start]:
- 遍歷當前節點 start 的所有鄰居節點。graph[start] 會取出 start 節點對應的鄰居列表。
-
if neighbor not in visited:
- 檢查這個鄰居節點是否已經被訪問過。如果尚未訪問,才繼續進行。
-
dfs(graph, neighbor, visited)
- 遞歸地呼叫 dfs 函式,以未訪問的鄰居作為新的起點,並將同一個 visited 集合傳遞下去。這就是深度優先搜尋的關鍵,它會深入探索一個分支,直到無路可走,才會回溯。
-
return visited
- 當從當前節點開始的所有可達節點都被訪問完畢後(遞歸呼叫都返回了),函式返回最終的 visited 集合。這個集合包含了從最初的 start 節點開始,所有能夠訪問到的節點。
-
graph = { 'A': ['B', 'C'], ... }
- 這部分程式碼開始定義了一個圖。它是一個字典,表示節點 'A' 連接到節點 'B' 和 'C'。... 表示圖的其他部分定義被省略了。
-
print(dfs(graph, 'A'))
- 呼叫 dfs 函式,從節點 'A' 開始進行深度優先搜尋。
- 函式執行完畢後,會返回從 'A' 可達的所有節點組成的集合。
- print() 函式將這個結果集合印出來。
總結來說,這段程式碼實現了遞歸版本的深度優先搜尋,並將從指定起點可達的所有節點收集在一個集合中返回。由於圖的定義不完整,無法確定具體的輸出集合內容,但可以確定輸出將是一個包含可達節點的集合。
1
0