下面是我們正在學習節點,路徑等的算法類的分配。代碼旨在檢查一個節點是否可以從另一個節點到達。下面的代碼工作,但我不清楚爲什麼。 G是包含每個節點作爲關鍵字的「圖形」,值爲它連接的節點。下面的mark_component函數返回給定節點的多個節點。這個Python函數如何返回數字,但也是一個字典?
然而,其目的是返回True如果兩個節點都可訪問的功能check_connection,它調用此函數mark_component,然後進行測試,看看如果一個節點是在一本字典。
我不明白的是check_connection開始與「標記」一個空的字典,然後使用該字典要求mark_component。節點然後被添加到它。但是,mark_component返回一個數字,那麼check_connection函數如何能夠「讀取」標記的內容呢?就這個功能而言,我認爲標記仍然是空的。我想我假設標記是一個包含字典的局部變量,但它顯然可以傳遞給另一個函數並進行更改。
任何人都可以向我解釋這個嗎?非常感謝
def mark_component(G, node, marked):
marked[node] = True
total_marked = 1
for neighbor in G[node]:
if neighbor not in marked:
total_marked += mark_component(G, neighbor, marked)
return total_marked
def check_connection(G, v1, v2):
# Return True if v1 is connected to v2 in G
# or False if otherwise
marked = {}
mark_component(G, v1, marked)
return 'a' in marked
G = {'a': {'d': 1, 'g': 1}, 'c': {'g': 1}, 'b': {'f': 1},
'e': {'h': 1, 'f': 1}, 'd': {'a': 1, 'g': 1},
'g': {'a': 1, 'c': 1, 'd': 1}, 'f': {'b': 1, 'e': 1}, 'h': {'e': 1}}
print check_connection(G,'a', 'b')
這在別處詳細解釋。例如,請參閱[這裏](http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference/986145#986145)。 –