如何在2D数组(C++)中检查我周围单元格的邻居? 所以我要检查任何给定的2D数组的当前单元周围的单元格是否具有一定的值0或1,并且取决于我想计算当前单元周围的总计1个值的值,然而,我不知道如何抓住下面的位置,我认为我将考虑每一个一般的代码。一个细胞的位置,但我不能完全肯定它是正确的,如果它是正确的,我不知道如何抓住周围的细胞。没有必要写出完整的代码,但基本上,我在寻找位置的条件,以便在将来的嵌套if语句中检查位置,这些语句将成为这些大型if语句(如array)的一部分 如果数组[xPosition+1][yPosition+1]==1

如何在2D数组(C++)中检查我周围单元格的邻居? 所以我要检查任何给定的2D数组的当前单元周围的单元格是否具有一定的值0或1,并且取决于我想计算当前单元周围的总计1个值的值,然而,我不知道如何抓住下面的位置,我认为我将考虑每一个一般的代码。一个细胞的位置,但我不能完全肯定它是正确的,如果它是正确的,我不知道如何抓住周围的细胞。没有必要写出完整的代码,但基本上,我在寻找位置的条件,以便在将来的嵌套if语句中检查位置,这些语句将成为这些大型if语句(如array)的一部分 如果数组[xPosition+1][yPosition+1]==1,c++,multidimensional-array,C++,Multidimensional Array,这是假肢 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

这是假肢

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 {

    }

可以使用嵌套循环

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];
    }
}

可以使用嵌套循环

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];
    }
}

代码是不言自明的,我已经添加了注释

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
    }        

代码是不言自明的,我已经添加了注释

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
    }        

你为什么要这么做?通常,您只需对照地图边界检查currentCellIndex+或-1,以防止访问地图以外的内容,当currentCellIndex+/-1位于地图内时,计算该值。这是用于我应该运行模拟的作业,规则状态取决于周围的单元格,当前单元格可以从填充状态变为未填充状态,反之亦然。所以我需要知道周围的细胞是否被填充。这听起来像是学习的一个常见任务。一个简单的技巧是使用边框使数组变大。因此,你不需要在阅读中检查界限。你只需要调整你的计算/写入循环,跳过边界单元格。你为什么要这么做?通常,您只需对照地图边界检查currentCellIndex+或-1,以防止访问地图以外的内容,当currentCellIndex+/-1位于地图内时,计算该值。这是用于我应该运行模拟的作业,规则状态取决于周围的单元格,当前单元格可以从填充状态变为未填充状态,反之亦然。所以我需要知道周围的细胞是否被填充。这听起来像是学习的一个常见任务。一个简单的技巧是使用边框使数组变大。因此,你不需要在阅读中检查界限。您只需调整用于求值/写入的循环即可跳过边界单元格。