因此,我尝试检查任何给定2D数组当前单元格周围的单元格是否具有某个值(0或1),并根据该值我要计算总数(当前值周围总共1个值)单元格),但是我不确定如何抓住下面的位置是我写的一些伪代码,我认为它将考虑单元格的每个一般位置,但是我不确定它是否正确,如果正确,我我不确定如何抓住周围的牢房。不必写出完整的代码,但是基本上我正在寻找条件来检查将来嵌套的if语句的位置,这些语句将具有这些大的if语句(例如数组)
if array([xPosition+1][yPosition+1] == 1)
这是伪代码
if (xPosition==0 && yPosition==0) {
} else if (xPosition==rows && yPosition==columns) {
} else if (xPosition==rows && yPosition==0) {
} else if (xPosition==0 && yPosition==columns) {
} else if (xPosition==0) {
} else if (xPosition==rows) {
} else if (yPosition==0) {
} else if (yPosition==columns) {
} else {
}
答案 0 :(得分:4)
您可以使用嵌套循环
int sum{0};
for (int x{std::max(xPosition, 1) - 1}; x < std::min(xPosition + 2, columns); ++x) {
for (int y{std::max(yPosition, 1) - 1}; y < std::min(xPosition + 2, rows); ++y) {
if (x == xPosition && y == yPosition) continue;
sum += array[x][y];
}
}
答案 1 :(得分:1)
代码是不言自明的,我已经添加了注释
bool isSafe(int xPosition, int yPosition,
int rows, int columns) { // checking the boundry
return (xPosition >= 0 && xPosition < rows &&
yPosition >= 0 && yPosition < columns);
}
void checkNeighbours(int xPosition, int yPosition,
int rows, int columns) {
// Considering only 4 directions up, down , right, left
int count = 0;
if(isSafe(xPosition - 1, yPosition)) { // one cell up
if(array[xPosition - 1][yPosition] == 1) {
count ++;
}
}
if(isSafe (xPosition + 1, yPosition)) { // one cell down
if(array[xPosition + 1][yPosition] == 1) {
count ++;
}
}
if(isSafe(xPosition, yPosition - 1)) { // one cell left
if(array[xPosition][yPosition - 1] == 1) {
count ++;
}
}
if(isSafe(xPosition, yPosition + 1)) { // one cell right
if(array[xPosition][yPosition + 1] == 1) {
count ++;
}
}
// use count for whatever
}