You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现康威生命游戏算法异常,垂直活细胞条无法正确转换为水平条

康威生命游戏代码错误修正

你的代码问题完全出在邻居细胞计数逻辑部分,具体错误和修正方案如下:

错误点梳理

  • 遍历范围错误:现有代码仅遍历当前单元格右下角2×2区域,最多只能统计3个相邻细胞,不符合生命游戏要求统计周围8个方向所有邻居的规则。
  • 自身排除逻辑错误:if (i != 0 and j!= 0)的判断和排除当前单元格没有任何关联,仅过滤了i=0或j=0的行/列的计数,完全不符合逻辑。
  • 无边界校验:遍历邻居时没有判断坐标是否落在world数组的合法范围内,会出现下标越界,读取到无效内存值干扰计数结果。

修正后的代码

void new_generation() {
    for (int i=0; i<worldHeight; i++){
        for (int j=0; j<WorldWidth; j++) {
            int count = 0;
            // 遍历8个方向的邻居
            for (int dy = -1; dy <= 1; dy++) {
                for (int dx = -1; dx <= 1; dx++) {
                    // 跳过当前单元格自身
                    if (dy == 0 && dx == 0) continue;
                    // 计算邻居坐标
                    int ny = i + dy;
                    int nx = j + dx;
                    // 校验坐标合法性
                    if (ny >=0 && ny < worldHeight && nx >=0 && nx < WorldWidth) {
                        if (world[ny][nx]) count++;
                    }
                }
            }
            // 生命游戏规则更新
            if (world[i][j]) {
                new_world[i][j] = (count == 2 || count ==3);
            } else {
                new_world[i][j] = (count ==3);
            }
        }
    }
    // 同步到当前世界
    for (int i=0; i<worldHeight; i++){
        for (int j=0; j<WorldWidth; j++) {
            world[i][j] = new_world[i][j]; 
        }
    }
}

修正后你测试的垂直三格闪烁子就可以正常翻转为水平排列,符合生命游戏规则。

内容的提问来源于stack exchange,提问作者Weegloogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:39:04