我有一个包含许多子图的图表。我有一些边缘在两个方向上连接两个节点,即A - > B和B - > A。双向性很重要,因为它表示我们缺乏关于A是否转到B或B转到A的知识,而且我们没有简单的方法来确定哪个是正确的。
我想知道有多少个子图,并将每个子图中的边输出到Pandas DataFrame。但是,NetworkX仅在提供的connected_components_subgraph(G)函数中接受无向图。当我将图形转换为无向图形时,我可以使用connected_components_subgraph()来获取每个边缘中的节点,但是我会失去边缘方向性。
有没有一种简单的方法可以做我想要实现的目标?
答案 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文章。