图中的孤立组

isolated groups in a graph

我想写一段代码来检测图中的节点组。例如,请参见所附图片。我在那里绘制了一个包含 3 组节点的图表。算法的结果应该是 {0, 1, 2}, {3, 4 ,6 ,7}, {5, 8}.

我的直觉是 运行 为每个标记找到的节点(它可以到达的节点)的每个节点使用 DFS 算法,如果我对节点 0 执行此操作,它将标记节点 1 和 2。如果我 运行 它然后对于节点 1 它将找到 none 因为其组中的所有节点都已被标记。每个节点DFS发现的每组节点将是一组。最后我会保留非空组。

我的问题是:我可以使用某种聚类算法找到组吗?

测试图代码:

import networkx as nx
g = nx.Graph()

g.add_edge(0, 1)
g.add_edge(1, 2)

g.add_edge(6, 7)
g.add_edge(4, 7)
g.add_edge(3, 4)

g.add_edge(5, 8)


from matplotlib import pyplot as plt
nx.draw(g)

plt.show()

编辑

正如下面评论的那样,答案是:

from networkx import connected_components
connected_components(g)

networkx 的 connected_components 功能是您要找的吗?从图表中,它 returns 列表生成器,每个生成的项目都是连接节点的列表。