Python程序:查找单元格矩阵的下一个状态?


假设我们有一个二维二进制矩阵,其中1表示活细胞,0表示死细胞。一个细胞的邻居是其直接的水平、垂直和对角线细胞。我们必须使用以下规则找到矩阵的下一个状态

  • 任何具有两个或三个活邻居的活细胞都将存活。

  • 任何具有三个活邻居的死细胞都将变成活细胞。

  • 所有其他细胞都将死亡。

因此,如果输入如下所示:

1100
0100
0101
1101

那么输出将是

1100
0100
0100
1100

为了解决这个问题,我们将遵循以下步骤

  • n := 矩阵的行大小,m := 矩阵的列大小

  • res := 一个大小为 n x m 的矩阵,并填充 0

  • 对于 i 的范围从 0 到 n,执行

    • 对于 j 的范围从 0 到 m,执行

      • s := 0

      • 如果 matrix[i, j] 等于 0,则

        • 对于 k 的范围从 i - 1 到 i + 1,执行

          • 对于 h 的范围从 j - 1 到 j + 1,执行

            • 如果 0 <= k < n 且 0 <= h < m,则

              • s := s + matrix[k, h]

        • res[i, j] := [0, 1, 当 s 等于 3 时为真]

      • 否则,

        • 对于 k 的范围从 i - 1 到 i + 1,执行

          • 对于 h 的范围从 j - 1 到 j + 1,执行

            • 如果 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]]

更新于: 2020年11月10日

浏览量 124

开启你的职业生涯

通过完成课程获得认证

开始学习
广告