我尝试编写一个函数,该函数将返回子网中所有连接节点的列表,给定子图中的起始节点:
例如,下图有两个子网,一个红色,一个绿色,如下图所示:
使用名为networkx的python软件包,我运行了以下代码:
import networkx as nx
import pandas as pd
import numpy as np
G=nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_node(4)
G.add_node(5)
G.add_node(6)
G.add_edge(1,2)
G.add_edge(2,3)
G.add_edge(1,5)
G.add_edge(4,6)
def recurse(G, z , node):
z.append(node)
n = list(set(G.neighbors(node)) - set(z))
if len(n) == 0:
return []
else:
for i in n:
if i not in z:
z.extend(recurse(G, z, i))
return z
z = []
f = recurse(G,z,1)
print(f)
该函数应该返回子组 - > [1,2,3,5]当给定(1)作为起始节点但返回[1,2,3,1,2,3]
时我是如何通过调整代码或使用其他方法来执行此任务的?
谢谢!
答案 0 :(得分:2)
如果您对访问节点的顺序不感兴趣,您可以执行DFS并将访问过的节点收集到set
:
def recurse(G, z, node):
z.add(node)
for i in G.neighbors(node):
if i not in z:
recurse(G, z, i)
z = set()
recurse(G,z,1)
print(z) # {1, 2, 3, 5}