康威尔生命游戏规则介绍与学习

康威尔生命游戏

顾名思义,康威尔生命游戏是由数学家约翰·康威在 1970 年发明的一个小游戏,它也被称为细胞自动机,在计算机领域几乎算得上家喻户晓了。

生命游戏规则

生命游戏的规则非常简单: 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。

每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:

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

下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。

生命游戏 Python 代码实现

下面的 Python 实现可能不是最简洁的,因为在计算格子边界的地方加了很多条件判断,但整个算法实现下来也只需要约 30 行代码就可以搞定了。

复制代码
class Solution:
  def gameOfLife(self, board: List[List[int]]):
    m, n = len(board), len(board[0])
    lives = [[0 for j in range(n)] for i in range(m)]
    # 更新每个格子中四周活细胞的数目
    for i in range(m):
      for j in range(n):
        if i > 0:
          lives[i][j] += board[i-1][j]
          if j > 0:
            lives[i][j] += board[i-1][j-1]
          if j < n - 1:
            lives[i][j] += board[i-1][j+1]
        if i < m - 1:
          lives[i][j] += board[i+1][j]
          if j > 0:
            lives[i][j] += board[i+1][j-1]
          if j < n - 1:
            lives[i][j] += board[i+1][j+1]
        if j > 0:
          lives[i][j] += board[i][j-1]
        if j < n - 1:
          lives[i][j] += board[i][j+1]
    # 更新每个格子中细胞的状态
    for i in range(m):
      for j in range(n):
        if board[i][j] == 1:
          if lives[i][j] < 2 or lives[i][j] > 3:
            board[i][j] = 0
        else:
          if lives[i][j] == 3:
            board[i][j] = 1
    return board
相关推荐
旖旎夜光22 分钟前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
叼烟扛炮6 小时前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain
叼烟扛炮10 小时前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain
且从容.11 小时前
VUE3学习笔记(根据黑马教程总结)
笔记·学习
蒸蒸yyyyzwd13 小时前
关于 AI 开发相关的一些面经。
笔记·学习
坤坤子吖19 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
蒸蒸yyyyzwd20 小时前
后端相关学习笔记。
笔记·学习
旖旎夜光21 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
橙橙笔记1 天前
QT的学习第四部分
linux·qt·学习·音视频
叼烟扛炮1 天前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习