【发布时间】:2020-09-20 15:32:59
【问题描述】:
我有一个如下图所示的 Networkx 图表
图像已使用以下代码创建
import networkx as nx
import matplotlib.pyplot as plt
G = nx.gnm_random_graph(n=20, m=30, seed=1)
nx.draw(G, with_labels=True)
plt.show()
G.add_edges_from([(2, 20), (20, 8)])
n = len(G.nodes())
retain_node_ids = [1,2]
G.add_edges_from([(u, v) for u in retain_node_ids for v in (n, n+1)])
G = nx.k_core(G, k=2)
G.remove_nodes_from([n, n+1])
nx.draw(G, with_labels=True)
plt.show()
这是一个流网络,我想删除像红色标记的循环。这是一个示例图;在真实的网络中有很多这样的循环,我想检测并删除这些循环中的所有边缘。
例如,流向是从 7 -> 8 并且没有出口,边 (7,8) 不是多边。
非常感谢有关如何删除此类循环的建议。
编辑: 为什么要删除红框内的循环区域? 这是因为图形是有向的。假设流向是从 7 到 8,这是一个运输网络,一旦货物流入 8,那么它可以从 8 -> 2 或 8-> 20 运输,但没有退出循环。
【问题讨论】:
-
听起来你想计算一个minimum spanning tree。
-
你的图是定向的吗?我认为这是因为您在谈论流程,如果是,那么起始节点是什么?您是否只想找到孤立的循环(仅通过 1 条边连接到图的其余部分)?
-
@AzimMazinani 是的,我的图是有向的
-
@Oil L 感谢您的建议。但我正在寻找一种仅删除上述循环的方法,最小生成树也会删除其他循环。
-
问题格式不正确。是什么让红框中的循环与图中的任何其他循环不同?呈现的图也是无向的,但问题似乎与有向图中的特定循环模式有关?至少发布一个有向图,清楚地显示你正在尝试做什么。
标签: python-3.x graph networkx