我有这个图表:
%matplotlib inline
import networkx as nx
G = nx.Graph()
G.add_edge(1, 2)
G.add_edge(2, 3)
G.add_edge(3, 4)
G.add_edge(3, 5)
G.add_edge(4, 6)
G.add_edge(5, 6)
G.add_edge(3, 7)
G.add_edge(7, 6)
G.add_edge(6, 8)
G.add_edge(8, 9)
nx.draw(G, pos=nx.spring_layout(G), with_labels=True)
Run Code Online (Sandbox Code Playgroud)
是否可以在不使用nx.subgraph(G, [3,4,5,6,7]). 我的意思是,如果我知道有这个子图,但我不知道例如第 5 个子图怎么办?
我的答案和back2basics非常相似,但是更直接地找到两者之间的节点。source如果存在从到 的路径target,则将找到该路径,并nx.all_simple_paths(G, source=source, target=target)返回路径的生成器。
import networkx as nx
G = nx.Graph()
G.add_edges_from([(1, 2), (2, 3), (3, 4), (3, 5), (4, 6), (5, 6), (3, 7), (7, 6), (6, 8), (8, 9)])
paths_between_generator = nx.all_simple_paths(G,source=3,target=6)
nodes_between_set = {node for path in paths_between_generator for node in path}
SG = G.subgraph(nodes_between_set)
Run Code Online (Sandbox Code Playgroud)
使用nodes_between_set = ...“设置生成器”。它相当于
nodes_between_set = set()
for path in paths_beween_generator:
for node in path:
nodes_between_set.add(node)
Run Code Online (Sandbox Code Playgroud)