gpt4 book ai didi

python - 如果节点之间存在路径,则在节点列表之间创建新边 - networkx

转载 作者:行者123 更新时间:2023-12-01 06:54:46 24 4
gpt4 key购买 nike

当节点之间存在路径时,当节点之间存在路径(可达性)时,我希望有一条边。

假设我有以下图表。

import networkx as nx
G=nx.DiGraph()
G.add_node(10, pr = 1)
G.add_node(20, pr = 2)
G.add_node(30, pr = 3)
G.add_node(40, pr = 2)

G.add_node(50, pr = 3)
G.add_node(60, pr = 1)

G.add_edges_from([(10,20),(10, 30),(10, 40),(10, 50),(20,30), (30,40), (40, 50), (50,60)])

nx.draw(G, with_labels = True, pos = nx.circular_layout(G),node_size =800)

enter image description here

我计划将下图作为输出。我想过滤具有属性(pr==1 和 pr==2)并忽略(pr==3)的节点。由于有一条从节点 10 到 40 的路径,我想在过滤过程中创建一条新边 (10, 40)。

enter image description here

这是我尝试的方法。

collector = nx.DiGraph()
for n1, atrr1 in G.nodes(data ='True'):
for n2, atrr2 in G.nodes(data ='True'):
if ((G.node[n1]['pr'] ==1) & (G.node[n1]['pr'] ==2)):

if (has_path(G,n1, n2)):
collector.add_edge(n1,n2)

if ((G.node[n1]['pr'] ==1) & (G.node[n2]['pr'] ==2)):

if (has_path(G,n1, n2)):
collector.add_edge(n1,n2)

if ((G.node[n2]['pr'] ==2) & (G.node[n2]['pr'] ==1)):

if (has_path(G,n1, n2)):
collector.add_edge(n1,n2)


nx.draw(collector, with_labels = True, pos = nx.spring_layout(collector))
plt.rcParams["figure.figsize"] = [6,6]
plt.axis('off')
plt.show()

看起来并不复杂,但我无法弄清楚。有人可以帮助我吗?

最佳答案

听起来你想计算 transitive closure你的图表。也就是说,图 G* 对输入图 G 进行建模,但如果节点之间存在路径,则节点之间还具有边。 Networkx 在输入图上提供此功能 transitive_closure(G) .

关于python - 如果节点之间存在路径,则在节点列表之间创建新边 - networkx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58861592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com