我正在尝试编写一个函数,该函数将返回子网中所有连接节点的列表,给定子图的起始节点:
例如,下图具有两个子网,一个红色和一个绿色,如下图所示:
使用名为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)作为起始节点时,该函数应该返回子组-> [1,2,3,5],但它返回[1,2,3,1,2,3]
有什么想法可以通过调整代码或使用其他方法来执行此任务吗?
谢谢!
如果您对节点的访问顺序不感兴趣,则可以执行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}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句