def _trim_branches(self, g, start, end):
"""Find all the paths from start to finish, and nuke any nodes that
aren't in those paths.
"""
good_nodes = set()
for path in networkx.all_simple_paths(
g,
source=start,
target=end):
[good_nodes.add(n) for n in path]
for node in g.nodes:
if node not in good_nodes:
g.remove_node(node)
return g
import networkx as nx
import itertools
G = nx.complete_graph(10) # or DiGraph, MultiGraph, MultiDiGraph, etc
# Concatenate all the paths and keep unique nodes (in one line)
all_path_nodes = set(itertools.chain(*list(nx.all_simple_paths(G, source=0, target=3))))
# Extract the induced subgraph from a given list of nodes
H = G.subgraph(all_path_nodes)
print(nx.info(H))
当@kikohs正在努力理解我的问题并给出他的答案时,我确实在这方面取得了一些进展,所以我将此作为问题的替代解决方案。不过,我确实认为他的回答很高明!在
使用
subgraph
来执行第二个循环显然更好,正如他使用itertools.chain
的一行程序一样。今天这些地方的东西很棒!在您可以使用返回生成器的方法
all_simple_paths
,但只需要第一个路径。然后可以使用G.subgraph(nbunch)
从路径返回包含的图。在编辑:要返回由所有简单路径引起的子图,只需将
all_simple_paths
返回的uniques节点连接起来。在输出:
^{pr2}$相关问题 更多 >
编程相关推荐