如何使用NetworkX获取图中的连通节点组?
获取NetworkX图中的所有连通分量
首先修正你代码里的一处错误:add_edges_from中的(7)不是合法的边定义——NetworkX要求边必须是包含两个节点的元组,单个节点无法构成边。由于节点7已经通过add_nodes_from添加到图中,直接移除这个无效项即可。
要提取图中所有两两连通的节点组(即连通分量),可以直接使用NetworkX内置的nx.connected_components()函数,它会返回图中所有连通分量的节点集合。将每个集合转换为列表后,就能得到你想要的数组格式。
完整实现代码
import networkx as nx G = nx.Graph() G.add_nodes_from([1, 2, 3, 4, 5, 6, 7]) # 修正边的定义,移除无效的(7) G.add_edges_from([(1, 2), (1, 3), (2, 4), (5, 6)]) # 提取所有连通分量并转为列表格式 connected_components = [list(comp) for comp in nx.connected_components(G)] print(connected_components)
运行后输出结果为:
[[1, 2, 3, 4], [5, 6], [7]]
如果需要对连通分量按节点顺序排序(比如按每个分量的首个节点升序排列),可以添加排序逻辑:
# 按分量首个节点升序排序 sorted_components = sorted(connected_components, key=lambda x: x[0]) print(sorted_components)
内容的提问来源于stack exchange,提问作者Gerzzog
相关产品推荐
相关产品推荐

