在二维数组中查找有效邻居 [英] Finding valid neighbors in 2D array
问题描述
所以,我有一个 4x4 的 2D 数组(它总是这些维度).从数组上的一个位置开始,一些行和列,我想找到它的所有有效邻居.到目前为止,我有一个非常笨拙的实现.
So, I have a 4x4 2D array (it will always be these dimensions). Starting with a location on the array, some row and column, I want to find all of its valid neighbors. So far, I have a really clunky implementation.
//add row
if ( !((row + 1) > 3)) {
//do stuff
}
//sub row
if ( !((row - 1) < 0)) {
//do stuff
}
//add col
if ( !((col + 1) > 3)) {
//do stuff
}
//sub col
if ( !((col - 1) < 0)) {
//do stuff
}
... and so on
这太残忍了.当我开始知道元素的位置时,我觉得我不需要检查每个邻居.有什么想法吗?
This is brutal. I feel like I do not need to check every single neighbor when I start by knowing the location of the element. Any ideas?
推荐答案
对于任何二维数组 cellValues[][]
的 (x,y)
维度下面的代码都可以用于获取任何单元格 (i,j)
的所有 8 个邻居.默认情况下,代码将返回 0
.
For any 2D array cellValues[][]
of (x,y)
dimensions below code can be used for getting all 8 neighbors for any cell (i,j)
. Code will return 0
by default.
public static ArrayList<Integer> getNeighbors(int i, int j, int x, int y, int[][] cellValues) {
ArrayList<Integer> neighbors = new ArrayList<>();
if(isCabin(i, j, x, y)) {
if(isCabin(i + 1, j, x, y))
neighbors.add(cellValues[i+1][j]);
if(isCabin(i - 1, j, x, y))
neighbors.add(cellValues[i-1][j]);
if(isCabin(i, j + 1, x, y))
neighbors.add(cellValues[i][j+1]);
if(isCabin(i, j - 1, x, y))
neighbors.add(cellValues[i][j-1]);
if(isCabin(i - 1, j + 1, x, y))
neighbors.add(cellValues[i-1][j+1]);
if(isCabin(i + 1, j - 1, x, y))
neighbors.add(cellValues[i+1][j-1]);
if(isCabin(i + 1, j + 1, x, y))
neighbors.add(cellValues[i+1][j+1]);
if(isCabin(i - 1, j - 1, x, y))
neighbors.add(cellValues[i-1][j-1]);
}
return neighbors;
}
public static boolean isCabin(int i, int j, int x, int y) {
boolean flag = false;
if (i >= 0 && i <= x && j >= 0 && j <= y) {
flag = true;
}
return flag;
}
这篇关于在二维数组中查找有效邻居的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!