下面是我们正在学习节点,路径等的算法类的分配。代码旨在检查一个节点是否可以从另一个节点到达。下面的代码工作,但我不清楚为什么。 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)。 –