首页 > 其他分享 >康威生命游戏

康威生命游戏

时间:2024-09-04 11:05:10浏览次数:10  
标签:生命 游戏 康威 int 细胞 live board && skewing

题目:康威生命游戏
分类:数组、矩阵、模拟
根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。
给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:
1.如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
2.如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
3.如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
4.如果死细胞周围正好有三个活细胞,则该位置死细胞复活;
下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。
示例 1:
输入:board = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]
输出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]
示例 2:
输入:board = [[1,1],[1,0]]
输出:[[1,1],[1,1]]
提示:
m == board.length
n == board[i].length
1 <= m, n <= 25
board[i][j] 为 0 或 1

思路

  • 源自题解,也是容易忽视的,导致后续数据被污染,部分出错;

此处复制一个newboard,所有的检索均针对newborad[i][j],在本元素的值确认后赋给board[i][j]

  • 鉴于对每个元素来说,都要检测8个邻居,可以看作三行三列,除开自己,而这里需要用本身来表示邻居,明显有-1、0、1的关系(行与列均是如此),所以可以共用一个偏移量skewing来表示邻居的行与列,分别是

  • 根据规则对live++

  • 注意此时skewing[s]和skewing[t]代表的是偏移的量

    当skewing[s]和skewing[t]都为0时,我们实际上并没有检查任何邻居。这种情况发生在当前细胞位于边界或角落时,它只有1或2个邻居。在这种情况下,我们不需要更新该细胞的状态,因为它的邻居数量已经符合上述规则。

  • 这里区分一个经典出错
    !((a == b) && (c == d)) 和 (a != b) && (c != d)

    • 对于 !((a == b) && (c == d)):
      此表达式取真的条件是当 a 不等于 b 或者 c 不等于 d。即如果两对比较中至少有一对不相等,则此表达式为真。
      用逻辑表达式来表示就是: !((a == b) && (c == d)) 等价于 (a != b) || (c != d),根据德摩根定律。
    • 对于 (a != b) && (c != d):
      此表达式取真的条件是当 a 不等于 b 且 c 不等于 d。即两对比较都必须不满足相等关系,此表达式才为真。
      这两个表达式虽然在某种程度上是逻辑等价的,但它们在具体实现上有着细微的差异。
/*java*/

class Solution {
    public void gameOfLife(int[][] board) {
        int m = board.length;
        int n = board[0].length;
        int live = 0;
        int[] skewing = {-1,0,1};
        int[][] newboard = new int[m][n];
        //i即newboard的行,j即newboard的列
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                newboard[i][j] = board[i][j];
            }
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                live = 0; // 重置 live 计数器
				/*扫描8个元素*/
                for (int s = 0; s < 3; s++) {
                    for (int t = 0; t < 3; t++) {
                        if (!(skewing[s] == 0 && skewing[t] == 0)) {
                            int front = i + skewing[s];
                            int back = j + skewing[t];

                            if (front >= 0 && front < m && back >= 0 && back < n ) {
                                if(newboard[front][back] == 1)
                                    live++;
                            }
                        }
                    }
                }

                if (newboard[i][j] == 1) {
                    if (live < 2 || live > 3) {
                        board[i][j] = 0;
                    }
                } else if (live == 3) {
                    board[i][j] = 1;
                }
            }
        }
    }
}

标签:生命,游戏,康威,int,细胞,live,board,&&,skewing
From: https://www.cnblogs.com/meriellan/p/18396060

相关文章

  • 3款免费录屏软件推荐,轻松录制《黑神话悟空》游戏精彩瞬间
    在万众瞩目的国产游戏大作《黑神话悟空》中,每一次华丽的连招、每一次惊心动魄的战斗,都是值得珍藏的宝贵记忆。想要将这些精彩瞬间完美记录下来,分享给同样热爱这款游戏的朋友们吗?别担心,今天我们就为大家推荐三款免费录屏软件,并附上详细的录屏方法,让你轻松捕捉《黑神话悟空》中的......
  • 康威生命游戏
    题目:康威生命游戏分类:数组、矩阵、模拟根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。给定一个包含m×n个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1即为活细胞(live),或0即为死......
  • 基于Android的小学数学游戏App的开发与设计-计算机毕业设计源码+LW文档
    摘 要利用了现代科技手段,将传统的小学数学教育与游戏娱乐相结合,为孩子们创造了一个更加轻松、有趣的学习环境。通过游戏化的方式,孩子们能够在玩乐中掌握数学知识,提升逻辑思维能力,激发学习兴趣。这种寓教于乐的学习方式不仅能够减轻孩子们的学习压力,还能有效提高学习效果,为他们今......
  • 【国产游戏的机遇与挑战】
    ......
  • 为何我如此眷恋生命
    为何我如此眷恋生命摇滚乐已死关于为何要延续的生命的理由很多,前现代的人们往往会将一个信仰作为现世的寄托,这样一来,彼岸的生活就变成了生命之实存的重要原因。但是我们生活在一个后尼采的时代。这使得生活之理由要么被忙碌的日子冲淡,要么停留在父母的规训里。可是每当深夜时......
  • 大二必做项目贪吃蛇超详解之下篇游戏核心逻辑实现
    贪吃蛇系列文章上篇win32库介绍中篇设计与分析下篇游戏主逻辑可以在Gitee上获取贪吃蛇代码。文章目录贪吃蛇系列文章5.核心逻辑实现分析5.3GameRun5.3.1PrintScore5.3.2CheckVK5.3.3BuyNewNode5.3.4NextIsFood5.3.4EatFood5.3.5NotFood5.3.6C......
  • Java面向对象练习---黑马文字版格斗游戏
    角色类属性:privateStringname;privateintblood;privatechargender;privateStringface;容貌face描述:String[]boyfaces={"风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"}......
  • 我克隆了我自己,数字生命有什么意义?
    1.场景...22.数字生命意义...23.具体实现思路...4 1.场景孩子:爸爸,今天天气不错,我们一起去打篮球吧?!爸爸:好呀,确实好久没有打球了,我这老胳膊老腿是应该锻炼一下了。孩子:还是去山上那个球场吧,环境比较好。爸爸:嗯,那就开车去,叫上妈妈和妹妹一起。孩子:嗯,带上一箱水,自从......
  • 【专题】2024年中国游戏出海洞察报告合集PDF分享(附原数据表)
     原文链接:https://tecdat.cn/?p=375702023年全球游戏市场规模高达6205.2亿美元,且预计未来持续增长,这清晰地展示了该市场的巨大潜力和良好前景。中国游戏在全球移动游戏市场的份额于2023年已达37%,产业贡献超30%的市场收入,这反映出中国游戏在全球市场中的地位日益重要,竞......
  • 深入浅出Entity-Component-System:重塑游戏开发的未来
    引言在游戏开发领域,架构设计往往决定了项目的成败。随着游戏规模和复杂度的不断增加,传统的面向对象编程(OOP)模式逐渐显露出其局限性。而ECS(Entity-Component-System)架构作为一种新兴的设计模式,正在彻底改变游戏开发的方式。本文将深入探讨ECS架构的原理、优势及其在实际开发中......