繁体   English   中英

在 python Networkx 中,如何通过避开某些定义的节点来获取从源到目标的路径?

[英]In python Networkx, how to get paths from source to target of a graph by avoiding certain defined nodes?

我在 python 中使用 Networkx 库创建了一个包含以下节点的示例无向图。nodes_connected = [(4,1),(2,5),(5,1), (4,2), (5,6) ]

我可以使用nx.all_simple_paths(...),即 all_paths = [[6, 5, 2, 4], [6, 5, 1, 4]]

但现在我需要获取所有路径,以避免路径包含节点 1。所以基本上我必须在路径到达节点 1 时阻止路径,这样我的路径不应该包含节点 1,即使有可能通过它存在一条路径。 即,all_paths 现在应该是 [[6, 5, 2, 4]]。

我可以获得不包含某些节点的所有路径吗? 如果是,如何使用 Networkx 实现它?

谢谢

在不包含1的节点上创建子图,然后在子图中查找路径。 .networkx 的最新版本相对有效地创建了子图。 他们实际上并没有创建新图,而是仅基于包含的节点创建原始图的“视图”。 所以你的代码看起来像:

G = nx.Graph()
G.add_edges_from([(4,1),(2,5),(5,1), (4,2), (5,6)])
nodelist = list(G.nodes())
nodelist.remove(1)
H = nx.subgraph(G)
print(nx.all_simple_paths(H,6,4))
> [[6, 5, 2, 4]]

对观点要小心一点:

G.remove_node(5)
print(H.nodes())
> [4, 2, 6]

如果我修改G ,它会影响H

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM