You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用NetworkX生成图中所有节点的全连接关系列表?

解决方案

方法思路

你需要的是图中所有连通节点的有序对(包含直接边和间接可达的节点对),再通过逆序对实现按首节点过滤所有关联节点。由于你的图是连通图(所有节点都在一个连通分量里),所有不同节点间都存在路径,因此可以直接生成所有u≠v的有序节点对;如果图存在多个连通分量,则只需针对每个分量内的节点生成对即可。

代码实现

import networkx as nx
import pandas as pd

# 初始化图
test = {'first': ['a', 'b', 'c'], 'next': ['b', 'c', 'd']}
dftest = pd.DataFrame(data=test)
G = nx.from_pandas_edgelist(dftest, 'first', 'next')

# 获取所有节点
nodes = list(G.nodes())

# 生成所有u≠v的有序节点对(包含直接和间接连通的所有情况)
all_connected_pairs = [(u, v) for u in nodes for v in nodes if u != v]

# 转换为你需要的逗号分隔格式的列表
result_list = [f"{pair[0]},{pair[1]}" for pair in all_connected_pairs]

# 输出结果
for item in result_list:
    print(item)

输出结果

运行后会得到所有有序节点对,包含你示例中的正向及逆序对:

a,b
a,c
a,d
b,a
b,c
b,d
c,a
c,b
c,d
d,a
d,b
d,c

多连通分量场景适配

如果你的图存在多个不连通的分量,只需针对每个连通分量单独生成节点对:

all_connected_pairs = []
for component in nx.connected_components(G):
    comp_nodes = list(component)
    all_connected_pairs.extend([(u, v) for u in comp_nodes for v in comp_nodes if u != v])

这样处理后,你就可以通过过滤列表中首列的节点,快速获取该节点的所有直接/间接关联节点。

内容的提问来源于stack exchange,提问作者boondocks5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:22:09