如何检查2D数组(C ++)中我周围细胞的邻居?

时间:2019-04-23 09:04:46

标签: c++ multidimensional-array

因此,我尝试检查任何给定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 {

    }

2 个答案:

答案 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
    }