如何在有向图中查找子图而不转换为无向图?

时间:2013-09-05 18:49:56

标签: python graph networkx

我有一个包含许多子图的图表。我有一些边缘在两个方向上连接两个节点,即A - > B和B - > A。双向性很重要,因为它表示我们缺乏关于A是否转到B或B转到A的知识,而且我们没有简单的方法来确定哪个是正确的。

我想知道有多少个子图,并将每个子图中的边输出到Pandas DataFrame。但是,NetworkX仅在提供的connected_components_subgraph(G)函数中接受无向图。当我将图形转换为无向图形时,我可以使用connected_components_subgraph()来获取每个边缘中的节点,但是我会失去边缘方向性。

有没有一种简单的方法可以做我想要实现的目标?

2 个答案:

答案 0 :(得分:3)

也许您正在寻找weakly connected components

该算法将边视为无方向并返回该图中的连通分量。

In [1]: import networkx as nx

In [2]: G = nx.DiGraph([(1,2),(2,1),(3,4)])

In [3]: for w in nx.weakly_connected_component_subgraphs(G):
   ...:     print(w.edges())
   ...:     
[(1, 2), (2, 1)]
[(3, 4)]

答案 1 :(得分:1)

您正在寻找图表的 SCC 强大 已连接 组件。可以使用 DFS (深度优先搜索)的变体找到它们。

您应该查看wiki文章。