python-3.x - 删除图网络中的循环
问题描述
我有一个如下图所示的 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 运输,但没有退出循环。
解决方案
Tarjan 算法检测有向图中的循环,并报告在循环中捕获的节点。根据实施情况,您必须多次重新运行它,直到它变得干净。
https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm
推荐阅读
- c++ - CUDA 内核在第二次运行时运行得更快 - 为什么?
- groovy - 如何在 Katalon Studio 中创建“随机电子邮件/密码”关键字以测试“注册”表单?
- python - 在 tensorflow 2.0 中是否有一种传统的方法来创建一个带有可变元素的张量?
- ios - 无法从 xcode 10.1 上传构建在 InfineaSDK.framework 之后添加
- angular7 - 用于验证纬度和经度的 Angular 指令
- java - JdbcSQLSyntaxErrorException:SQL 语句“DROP TABLE PUBLIC.PRODUCTS-[*]USERS IF EXISTS”中的语法错误
- html - django 没有通过使用表单中的 post 请求在前端提交响应
- c# - Unity3D - Google Play 64 位要求的问题
- google-cloud-platform - 试用期后移除 Google Cloud 项目资源
- ios - 核心蓝牙扫描未返回所有设备