【发布时间】:2019-09-06 18:42:07
【问题描述】:
我正在尝试将有向(非循环)图拆分为方向连接的路径,依赖于 connectivity:
当我测试弱连接和强连接子图时,我得到的结果如下:
Weak connectivity :
['16', '17'], ['3', '41', '39', '42']
Strong connectivity :
['17'], ['16'], ['39'], ['41'], ['3'], ['42']
我理解弱连接结果,但不理解强连接结果,因为我期望 3 个子图:[16, 17], [42, 39] 和 [3, 41, 39]。
我在这里缺少什么,为什么那些单节点列表?如何得到预期的结果?
代码如下:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_edges_from([('16', '17'), ('3', '41'), ('41', '39'), ('42', '39')])
print("Weak connectivity : ")
for subgraph in (G.subgraph(c).copy() for c in nx.weakly_connected_components(G)) :
print(subgraph.nodes)
print("Strong connectivity : ")
for subgraph in (G.subgraph(c).copy() for c in nx.strongly_connected_components(G)) :
print(subgraph.nodes)
nx.draw_networkx(G, pos=nx.circular_layout(G))
plt.show()
【问题讨论】:
-
一个强连通分量被定义为一个子图,使得存在从任何节点到任何其他节点的路径。 networkx给出的答案是正确的。也许您正在寻找其他东西?
-
好吧,那么 [16, 17] 将是一个强连通子图,因为你可以从 16 到 17,不是吗?还是您还需要能够从 17 岁到 16 岁?
-
我试图实现它以获得该图中所有可能的完整有向路径,所以我会从我的例子。
-
[16,17] 不是强定向的,因为没有从 17 到 16 的路径。
-
(我现在意识到这与连接无关,我对过于具体的案例下定了决心。一旦我知道我真正在寻找什么,我将编辑我的帖子)跨度>
标签: python graph networkx directed-graph