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

n×n二维数组四邻接连接场景下索引越界的高效检查方法

n×n二维数组节点邻接连接的索引越界优化问题

我有一个n×n的二维数组,需要将随机点与其四个相邻节点连接,相关示意图为网格四邻接节点示意图。

我最初想要使用如下代码实现:

connect(p, p - n);
connect(p, p + n);
connect(p, p - 1);
connect(p, p + 1);

目前遇到的问题是数组边缘的节点会出现索引越界。我最开始通过创建大小为(n + 2)×(n + 2)的数组解决该问题,这种方式能保持代码的简洁性,但不符合作业的存储要求,要求数组必须为n×n规格。

我查阅资料后调整了算法,代码如下:

connect(grid[i][j], grid[Math.max(0, i-1)][j]);
connect(grid[i][j], grid[Math.min(n - 1, i+1)][j]);
connect(grid[i][j], grid[i][Math.max(0, j-1)]);
connect(grid[i][j], grid[i][Math.min(n - 1, j+1)]);

但现在的实现会在索引越界时将节点与自身连接。需要更优质、更简洁的索引越界检查方法。


解决方案

你可以预先判断相邻坐标是否在合法区间内,只有符合要求才执行连接操作,完全避免自连问题。

基础清晰写法

逻辑直白易读,适合新手理解:

// 连接上方相邻节点
if (i - 1 >= 0) connect(grid[i][j], grid[i-1][j]);
// 连接下方相邻节点
if (i + 1 < n) connect(grid[i][j], grid[i+1][j]);
// 连接左侧相邻节点
if (j - 1 >= 0) connect(grid[i][j], grid[i][j-1]);
// 连接右侧相邻节点
if (j + 1 < n) connect(grid[i][j], grid[i][j+1]);

精简拓展写法

把方向偏移量统一存储,循环处理,后续如果要新增斜向相邻节点的连接逻辑,只需要修改偏移量数组即可,拓展性更强:

// 四个方向的[i,j]偏移量:上、下、左、右
int[][] dirs = {{-1,0}, {1,0}, {0,-1}, {0,1}};
for (int[] dir : dirs) {
    int ni = i + dir[0];
    int nj = j + dir[1];
    // 仅当相邻坐标在合法区间内时执行连接
    if (ni >= 0 && ni < n && nj >=0 && nj < n) {
        connect(grid[i][j], grid[ni][nj]);
    }
}

两种写法均严格符合n×n数组的存储要求,不会产生自连问题,第二种写法代码更简洁,复用性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:51:02