我想编写一段代码来检测图中的节点组。作为示例,请参阅附加的图像。在那里我绘制了一组包含3组节点的图表。算法的结果应该是{0,1,2},{3,4,6,7},{5,8}。
我的直觉是为标记找到的节点(它可以到达的节点)的每个节点运行DFS算法,如果我为节点0执行此操作,它将标记节点1和2.如果我运行它然后为节点1它将找不到,因为其组中的所有节点都已标记。每个节点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)