康威尔生命游戏顾名思义康威尔生命游戏是由数学家约翰·康威在 1970 年发明的一个小游戏它也被称为细胞自动机在计算机领域几乎算得上家喻户晓了。生命游戏规则生命游戏的规则非常简单 给定一个包含 m × n 个格子的面板每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态1 即为 活细胞 live或 0 即为 死细胞 dead。每个细胞与其八个相邻位置水平垂直对角线的细胞都遵循以下四条生存定律如果活细胞周围八个位置的活细胞数少于两个则该位置活细胞死亡如果活细胞周围八个位置有两个或三个活细胞则该位置活细胞仍然存活如果活细胞周围八个位置有超过三个活细胞则该位置活细胞死亡如果死细胞周围正好有三个活细胞则该位置死细胞复活下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的其中细胞的出生和死亡是同时发生的。给你 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][j1] if i m - 1: lives[i][j] board[i1][j] if j 0: lives[i][j] board[i1][j-1] if j n - 1: lives[i][j] board[i1][j1] if j 0: lives[i][j] board[i][j-1] if j n - 1: lives[i][j] board[i][j1] # 更新每个格子中细胞的状态 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
康威尔生命游戏规则介绍与学习
康威尔生命游戏顾名思义康威尔生命游戏是由数学家约翰·康威在 1970 年发明的一个小游戏它也被称为细胞自动机在计算机领域几乎算得上家喻户晓了。生命游戏规则生命游戏的规则非常简单 给定一个包含 m × n 个格子的面板每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态1 即为 活细胞 live或 0 即为 死细胞 dead。每个细胞与其八个相邻位置水平垂直对角线的细胞都遵循以下四条生存定律如果活细胞周围八个位置的活细胞数少于两个则该位置活细胞死亡如果活细胞周围八个位置有两个或三个活细胞则该位置活细胞仍然存活如果活细胞周围八个位置有超过三个活细胞则该位置活细胞死亡如果死细胞周围正好有三个活细胞则该位置死细胞复活下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的其中细胞的出生和死亡是同时发生的。给你 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][j1] if i m - 1: lives[i][j] board[i1][j] if j 0: lives[i][j] board[i1][j-1] if j n - 1: lives[i][j] board[i1][j1] if j 0: lives[i][j] board[i][j-1] if j n - 1: lives[i][j] board[i][j1] # 更新每个格子中细胞的状态 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