networkX中最大的弱连接组件

Lio*_*Kuo 4 python graph centralized networkx

我有两个问题.

  1. 在无向图中,我想找到最大的连通分量.我阅读了networkX的API文档,找到了这个功能 nx.connected_component_subgraphs().但我不知道如何使用它,因为它的返回值是一个生成器,我无法得到一个最大连通组件的子图.

  2. 它与一个相同.但图表是针对性的.我想找到有向图中最大的弱连通分量.因此,我使用nx.weakly_connected_component_subgraphs(),这个功能.问题1中存在同样的问题.

如何使用networkX中的内置函数查找无向图中最大的连通分量和有向图中最大的弱连通分量?

我使用NetworkX 1.9.1.

Ari*_*ric 5

NetworkX组件函数返回Python生成器.您可以使用Python list函数在生成器中创建项列表.这是一个示例,显示并找到最大的弱连接组件.

In [1]: import networkx as nx

In [2]: G = nx.DiGraph()

In [3]: G.add_path([1,2,3,4])

In [4]: G.add_path([10,11,12])
Run Code Online (Sandbox Code Playgroud)

您可以使用eg list将生成器转换为子图列表:

In [5]: list(nx.weakly_connected_component_subgraphs(G))
Out[5]: 
[<networkx.classes.digraph.DiGraph at 0x278bc10>,
 <networkx.classes.digraph.DiGraph at 0x278ba90>]
Run Code Online (Sandbox Code Playgroud)

max运算符采用一个键参数,您可以将其设置为Python函数len,该函数在每个子图上调用len(g)来计算节点数.因此,要获得具有最大节点数的组件,您可以编写

In [6]: largest = max(nx.weakly_connected_component_subgraphs(G),key=len)

In [7]: largest.nodes()
Out[7]: [1, 2, 3, 4]

In [8]: largest.edges()
Out[8]: [(1, 2), (2, 3), (3, 4)]
Run Code Online (Sandbox Code Playgroud)