我可能对此想法太过思索,但缺少明显的东西,但是我想知道可以使用哪种NetworkX算法来实现以下目标:
给出一个DiGraph,例如:
以及节点列表,例如:Q1,Q2
查找与Q1和Q2连接(或换句话说,其子代)的所有节点,结果如下:
哪种算法可以实现?
答案 0 :(得分:0)
看起来您只需要对networkx.Digraph.predecessors进行递归
答案 1 :(得分:0)
第一种方法是使用列表,从您的节点开始访问每个节点的前身,并将其放在列表中,以这种方式用找到的节点构建树。
另一种方法是在图形上使用访问(DFS或BFS)来反转边缘。
考虑以下示例,其中我从节点“ Q1”开始构建bfs tree。
import networkx as nx
g = nx.DiGraph()
g.add_edges_from([("M1","Q1"),("I1","M1"),("I2","M1"),("I3","M1"),("I3","M2"),("M2","Q2")])
#creating a graph with the edges reversed
g2 = nx.DiGraph()
g2.add_edges_from([(v,u) for (u,v) in g.edges()])
t = nx.bfs_tree(g2, "Q1")
for (u,v) in t.edges():
t.remove_edge(u,v)
t.add_edge(v,u)
print(t.nodes(),t.edges())
# ['Q1', 'M1', 'I1', 'I2', 'I3'] [('M1', 'Q1'), ('I1', 'M1'), ('I2', 'M1'), ('I3', 'M1')]