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

如何使用NetworkX创建含对角连接的二维网格图?

如何使用NetworkX创建含对角连接的二维网格图?

嘿,我完全懂你的需求啦!你要的是八邻接网格图——也就是不仅上下左右的节点相连,对角线方向的节点也要互相连通,而NetworkX默认的grid_2d_graph只支持四邻接(仅上下左右)。下面我给你一步步演示怎么实现:

先把你的网格和对应坐标对应起来,方便后续操作:

坐标字母坐标字母坐标字母
(0,0)A(0,1)B(0,2)C
(1,0)L(1,1)M(1,2)N
(2,0)X(2,1)Y(2,2)Z

步骤1:导入NetworkX并创建基础四邻接图

先基于你的3行3列网格,创建一个基础的四邻接图:

import networkx as nx

# 定义网格的行数和列数
rows, cols = 3, 3
# 创建基础四邻接网格图(默认只连上下左右)
G = nx.grid_2d_graph(rows, cols)

步骤2:添加对角线连接的边

接下来手动补充对角线的边,让每个节点和它的对角邻居连通:

# 遍历所有节点的坐标
for i in range(rows):
    for j in range(cols):
        # 连接右下方向的对角节点 (i+1, j+1)
        if i + 1 < rows and j + 1 < cols:
            G.add_edge((i, j), (i+1, j+1))
        # 连接左下方向的对角节点 (i+1, j-1)
        if i + 1 < rows and j - 1 >= 0:
            G.add_edge((i, j), (i+1, j-1))

步骤3:把坐标节点替换成你的字母标签

现在图里的节点是坐标格式,我们用你的dx_grid把节点重命名为对应的字母:

dx_grid = [["A", "B", "C"],
           ["L", "M", "N"],
           ["X", "Y", "Z"]]

# 创建坐标到字母的映射字典
label_mapping = {(i, j): dx_grid[i][j] for i in range(rows) for j in range(cols)}
# 重命名图中的节点
G = nx.relabel_nodes(G, label_mapping)

验证效果

你可以检查节点M的邻居,现在它应该包含所有8个方向的节点:

print(list(G.neighbors("M")))
# 输出:['B', 'L', 'N', 'Y', 'A', 'C', 'X', 'Z']

如果想直观看到图的结构,还可以用matplotlib可视化:

import matplotlib.pyplot as plt

nx.draw(G, with_labels=True, node_size=1500, font_size=12, node_color="#f0f0f0")
plt.show()

这样就完全实现你想要的带对角线连接的网格图啦!

备注:内容来源于stack exchange,提问作者blackthorne18

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:23:05