首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在conways的生活游戏中以2D数组计算(8个可能的)邻居

在conways的生活游戏中以2D数组计算(8个可能的)邻居
EN

Stack Overflow用户
提问于 2020-08-21 01:31:18
回答 1查看 441关注 0票数 0

我必须计算每个单元格有多少个“活的”(在本例中是一个字符:“O”)。每个单元格有8个邻居。(这是为康威的“生活的游戏”写的)

“正如你所注意到的,每个单元有8个邻居。我们认为宇宙是周期性的:边界单元也有8个邻居。例如:Neighbours from a "normal" cell

如果单元格是右边界,那么它的右(东)邻居是同一行中最左边的单元格。如果单元格是下边框,则其下(南)邻居是同一列中最上面的单元格。角落单元使用这两种解决方案。“When a cell is border and when a cell is a top corner

这些链接是如何在“异常”情况下检查单元格的可视化。

我在网上找到了这个:

代码语言:javascript
复制
for (int x = -1; x <= 1; x += 1) {
    for (int y = -1; y <= 1; y += 1) {
        int r = i + y;
        int c = j + x;
        if (r >= 0 && r < n && c >= 0 && c < n
                && !(y == 0 && x == 0)
                && currentUniverse[i][j] == 'O') {
            neighbours++;
        }

然而,这似乎并不起作用。我不能想出一个整洁的,最重要的是聪明的/方便的/简短的代码来检查一个单元在一个位置(假设currentUniverse[i][j])有多少活的邻居……

有没有人有建议、小贴士或其他帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-21 05:03:45

试试看这个。我使用n作为数组的大小(假设为平方)。

代码语言:javascript
复制
int n = 4;
System.out.println();
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        int neighbours = 0;
        for (int x = -1; x <= 1; x += 1) {
            for (int y = -1; y <= 1; y += 1) {
                if (!(y == 0 && x == 0)) {
                    int r = i + y;
                    int c = j + x;
                    //normalize
                    if (r < 0) r = n - 1;
                    else if (r == n) r = 0;

                    if (c < 0) c = n - 1;
                    else if (c == n) c = 0;
                    if (currentUniverse[r][c] == 0)
                        neighbours++;
                }
            }
        }
        System.out.print("\t" + neighbours);
    }
    System.out.println();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63510358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档