用 Python 编写程序来查找下一个细胞矩阵状态的下一个状态?
pythonserver side programmingprogramming更新于 2026/2/16 12:28:17
假设我们有一个 2D 二进制矩阵,其中 1 表示活细胞,0 表示死细胞。细胞的邻居是其直接的水平、垂直和对角细胞。我们必须使用这些规则找到矩阵的下一个状态
任何有两个或三个活邻居的活细胞都会存活。
任何有三个活邻居的死细胞都会变成活细胞。
所有其他细胞都会死亡。
因此,如果输入如下
| 1 | 1 | 0 | 0 |
| 0 | 1 | 0 | |
| 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 1 |
则输出将是
| 1 | 1 | 0 | 0 |
| 0 | 1 | 0 | |
| 0 | 1 | 0 | |
| 1 | 1 | 0 | 0 |
为了解决这个问题,我们将遵循以下步骤:
n := 矩阵的行大小,m := 矩阵的列大小
res := 大小为 n x m 的矩阵,并填充0
对于 0 到 n 范围内的 i,执行
对于 0 到 m 范围内的 j,执行
s := 0
如果 matrix[i, j] 与 0 相同,则
对于 i - 1 到 i + 1 范围内的 k,执行
或 j - 1 到 j + 1 范围内的 h,执行
如果 0 <= k < n 且 0 <= h < m,则
s := s + matrix[k, h]
res[i, j] := [0, 1, 当 s 等于 3 时为 true]
否则,
对于 i - 1 到 i + 1 范围内的 k,执行
对于 j - 1 到 j + 1 范围内的 h,执行
如果 0 <= k < n 且 0 <= h < m,则
s := s + matrix[k, h]
如果 s 是 3 或 4,则
res[i, j] := 1
返回 res
让我们看看以下实现以便更好地理解:
示例
class Solution: def solve(self, matrix): n, m = len(matrix), len(matrix[0]) res = [[0 for j in range(m)] for i in range(n)] for i in range(n): for j in range(m): s = 0 if matrix[i][j] == 0: for k in range(i - 1, i + 2): for h in range(j - 1, j + 2): if 0 <= k < n and 0 <= h < m: s += matrix[k][h] res[i][j] = [0, 1][s == 3] else: for k in range(i - 1, i + 2): for h in range(j - 1, j + 2): if 0 <= k < n and 0 <= h < m: s += matrix[k][h] if s in [3, 4]: res[i][j] = 1 return res ob = Solution() matrix = [ [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [1, 1, 0, 1] ] print(ob.solve(matrix))
输入
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [1, 1, 0, 1] ]
输出
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0]]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

