Python 3.x 消除图网络中的循环

Python 3.x 消除图网络中的循环,python-3.x,graph,networkx,Python 3.x,Graph,Networkx,下图显示了一个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,

下图显示了一个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传输,但是没有从回路中退出。

< P > TARJANG算法检测有向图中的循环,并报告在循环中捕获的节点。根据实现情况,您必须多次重新运行它,直到它恢复正常


听起来您想计算a。您的图形是否指向?我假设这是因为你在谈论一个流,如果是的话,起始节点是什么?你是否只对寻找孤立循环感兴趣(仅通过一条边连接到图的其余部分)?@AzimMazinani是的,我的图是directed@Oil谢谢你的建议。但我正在寻找一种方法,只删除上面提到的循环,最小生成树也会删除其他循环。这个问题是不正确的。是什么使红色框中的循环不同于图形中的任何其他循环?给出的图也是无向图,但问题似乎与有向图中的特定循环模式有关?至少张贴一个有方向的图表,清楚地显示你正在尝试做什么。谢谢你的建议。但是我想删除的循环只有3个节点(上面也有说明)。我不清楚如何在这里使用Tarjan的算法。你能详细说明一下吗?