如何检测二维数组中两个元素是否为上下左右四方向相邻
矩阵相邻元素校验实现方案
功能需求
- 方法接收两个整型参数:起始值
start、目标值destination - 第一步校验起始值是否存在于固定矩阵中
- 第二步校验目标值是否在起始值的上下左右四个相邻方向范围内
- 矩阵无重复数字、结构固定不变
示例说明
- 示例1:

起始值为6、目标值为7时,二者相邻,校验判定为真 - 示例2:

起始值为4、目标值为2时,二者不相邻,校验判定为假
固定矩阵初始化代码
int[][] matrix = {{0,1,2,}, {3,4,5,}, {6,7,8}};
实现思路
当遍历找到起始值对应的坐标(row, col)后,上下左右四个相邻位置的坐标可以通过偏移量计算得到:
- 上:
(row-1, col) - 下:
(row+1, col) - 左:
(row, col-1) - 右:
(row, col+1)
需要先校验计算得到的新坐标是否在矩阵合法范围内,再比对该位置的值是否等于目标值即可。
完整实现代码
// 矩阵作为类静态成员,适配静态方法调用 private static int[][] matrix = {{0,1,2,}, {3,4,5,}, {6,7,8}}; public static double check(int start, int destination) { // 预定义四个方向的坐标偏移量,简化重复判断逻辑 int[][] offsets = {{-1,0}, {1,0}, {0,-1}, {0,1}}; int rowCount = matrix.length; int colCount = matrix[0].length; for(int row = 0; row < rowCount; row++) { for(int col = 0; col < colCount; col++) { // 匹配到起始值坐标 if(matrix[row][col] == start) { // 遍历四个相邻方向校验 for(int[] offset : offsets) { int newRow = row + offset[0]; int newCol = col + offset[1]; // 先校验坐标合法性,避免数组下标越界 if(newRow >= 0 && newRow < rowCount && newCol >=0 && newCol < colCount) { if(matrix[newRow][newCol] == destination) { // 校验通过,此处可替换为你的业务逻辑,示例返回1.0代表相邻 return 1.0; } } } // 四个方向均未匹配到目标值,示例返回0.0代表不相邻 return 0.0; } } } // 遍历完成未找到起始值,示例返回-1.0代表起始值不存在 return -1.0; }
内容的提问来源于stack exchange,提问作者Gentian Gashi
相关产品推荐
相关产品推荐

