根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。
给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:

 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
 如果死细胞周围正好有三个活细胞,则该位置死细胞复活;

根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。
 
示例:
输入:
[
  [0,1,0],
  [0,0,1],
  [1,1,1],
  [0,0,0]
]
输出:
[
  [0,0,0],
  [1,0,1],
  [0,1,1],
  [0,1,0]
]
 
思路:遍历每个元素周围的8个方向的元素,判断,进行模拟。
不过这道题学到的是可以用两个数组: int[] dx = new int[]{0,0,1,-1,1,-1,-1,1}; 与 int[] dy = new int[]{1,-1,0,0,1,1,-1,-1}; 然后还有一个循环从0开始遍历8个方向, int newX = i + dx[k]; 
, int newY = j + dy[k]; 这样遍历八个方向。
 1 void gameOfLife(int** board, int boardSize, int* boardColSize) {
2 if (boardColSize[0] == 0)
3 return;
4 int a[boardSize][boardColSize[0]];
5 int dir[8][2] = { {1,0},{0,1},{-1,0},{0,-1},{-1,-1},{1,1},{-1,1},{1,-1} };
6 int i = 0, j = 0, z;
7 for (i = 0; i < boardSize; i++)
8 {
9 for (j = 0; j < boardColSize[0]; j++)
10 {
11 a[i][j] = 0;
12 }
13 }
14
15
16 for (i = 0; i < boardSize; i++)
17 {
18 for (j = 0; j < boardColSize[i]; j++)
19 {
20 int k = 0;
21 for (z = 0; z < 8; z++)
22 {
23 int x = i + dir[z][0];
24 int y = j + dir[z][1];
25 if (x < 0 || y < 0 || x >= boardSize || y >= boardColSize[0])
26 {
27 continue;
28 }
29 if (board[x][y] == 1)
30 k++;
31 }
32 if (k < 2)
33 a[i][j] = 0;
34 if (board[i][j] == 1 && k >= 2 && k <= 3)
35 a[i][j] = 1;
36 if (board[i][j] == 1 && k > 3)
37 a[i][j] = 0;
38 if (k == 3)
39 a[i][j] = 1;
40 }
41 }
42 for (i = 0; i < boardSize; i++)
43 {
44 for (j = 0; j < boardColSize[0]; j++)
45 {
46 board[i][j] = a[i][j];
47 }
48 }
49 }
 

生命游戏(4.2leetcode每日打卡)的更多相关文章

  1. [LeetCode] Game of Life 生命游戏

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  2. React项目(二):生命游戏

    引子 这是16年最后的一个练手项目,一贯的感觉就是,做项目容易,写说明文档难.更何况是一个唤起抑郁感觉的项目,码下的每个字,心就如加了一个千斤的砝码. 2016年,有些事我都已忘记,但我现在还记得.2 ...

  3. 生命游戏/Game of Life的Java实现(转)

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

  4. javascript小游戏--生命游戏

    昨天参加Code Retreat的活动,"Code Retreat是一个一天的集中练习的活动,专注于软件开发和设计的基础". 要了解更多信息可前往 CodeRetreat官网 通过 ...

  5. 生命游戏 Java

    本程序由四个类组成:其中Init_data,用于初始化各个活细胞的状态judge_state,用于判断下一代的细胞状态,并进行更新.set_color,用于给GUI界面中各个细胞涂色set_frame ...

  6. Conway生命游戏

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9986679.html 作者:窗户 Q ...

  7. [Swift]LeetCode289. 生命游戏 | Game of Life

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  8. python实现简单动画——生命游戏

    生命游戏 生命游戏的宇宙是一个无限的,其中细胞的二维正交网格,每个细胞处于两种可能的状态之一,即*活着*或*死亡*(分别是*人口稠密*和*无人居住*).每个细胞与它的八个邻居相互作用,这八个邻居是水平 ...

  9. 生命游戏&一维细胞自动机 笔记

    de 生命游戏是一种简单的聚合模型,展示了事物是如何聚合的,是自动机(CA)模型的一种.由剑桥大学约翰康威发明,其规则为: 1. 每个细胞拥有八个邻居,细胞状态只有存活(黑)和死亡(白)两种: 2.处 ...

  10. 生命游戏/Game of Life的Java实现

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

随机推荐

  1. Go语言中指针详解

    指针在 Go 语言中是一个重要的特性,它允许你引用和操作变量的内存地址.下面是指针的主要作用和相关示例代码: 1. 引用传递 在 Go 中,所有的变量传递都是值传递,即复制变量的值.如果你想在一个函数 ...

  2. Typescript: 当出现错误时,不编译文件成js文件

    在tsconfg.json文件中添加如下选项 "noEmitOnError": true, /* Disable emitting files if any type checki ...

  3. 使用sqlplus

    1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时, ...

  4. redis开启多线程

    在Redis 6.0中,非常受关注的第一个新特性就是多线程. 在Redis 6.0中,多线程默认是禁用的,只使用主线程.如果需要使用多线程功能,需要在 redis.conf文件中进行配置(重启服务). ...

  5. Combobox后台绑定

    本文主要介绍WPF中Combobox的后台绑定,我在这里主要讲解数据驱动 1.对于前台绑定,我们首先写出想要绑定的对象 新建一个Models文件夹,将Student类写入 public class S ...

  6. Git-入门使用资料

    一.Git入门教程 Git入门视频,针对于小白快速入门,时常约2~3小时 Git入门视频 相关课件资料: https://pan.baidu.com/s/1U-s4OmkToXJ5Y7BbJ7w2Ww ...

  7. 干货分享:用ChatGPT调教批量出Midjourney咒语,出图效率Nice ,附资料。

    Prompts就是AI绘图的核心竞争力. 您是不是觉得用Midjourney生成的图不够完美? 又让ChatGPT去生成Prompt,然后效果还不理想? 其实ChatGPT你给他投喂资料后,经过调教的 ...

  8. MATLAB入门小操作(数据类型)

    这是一篇有助于快速上手MATLAB软件的文章(新手向).(学习过其他的语言更容易看懂) 数据类型 这篇文章我想从MATLAB中的数据类型出发去列举一些经常使用的操作.MATLAB中的数据类型包括其他语 ...

  9. WPF学习 - 用鼠标移动、缩放、旋转图片(2)- 使用MatrixTransform

    在上一篇文章中,提到了以鼠标控制变换图片的方法. 这种方法在某种情况下可以,例如,直接在windows窗体上.但我发现,当把它封装到一个控件中的时候,它就不行了. 经过不断的尝试,我找到了一种更简单的 ...

  10. Elasticsearch之索引简单应用

    本篇所有操作都在 Kibana 上执行 创建第一个索引 PUT product { // 索引设置 "settings": { // 分片数量 "number_of_sh ...