假设图形是无向的,则有一个内置的networkx命令:
node_connected_component(G, n)
文档是here.它返回包含n的G的连通组件中的所有节点.
它不是递归的,但我认为你实际上不需要甚至不需要它.
对您的代码的评论:您有一个通常会导致无限递归的错误.如果u和v是度数至少为2的邻居,则它将以u开头,将v放入列表中,当处理v时将u放入列表中并继续重复.它需要更改为仅处理不在neighbor_list中的邻居.检查它是昂贵的,所以改为使用一套.如果起始节点具有1级,那么也存在一个小问题.您对1级的测试不能完成您所追求的目标.如果初始节点具有1级,但其邻居具有较高程度,则它将找不到邻居的邻居.
这是对代码的修改:
def fetch_connected_nodes(G, node, seen = None):
if seen == None:
seen = set([node])
for neighbor in G.neighbors(node):
print(neighbor)
if neighbor not in seen:
seen.add(neighbor)
fetch_connected_nodes(G, neighbor, seen)
return seen
你把它称为fetch_connected_nodes(assembly,starting_node).