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

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

  • 任何有两个或三个活着邻居的活细胞都可以生活。

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

  • 所有其他细胞死亡。

所以,如果输入像

1100
0100
0101
1101

那么输出将是

1100
0100
0100
1100

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

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

  • res:=大小为nxm的矩阵,并用0填充

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

    • s:= 0

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

    • 除此以外,

    • 或h在j-1至j + 1的范围内,执行

    • s:= s +矩阵[k,h]

    • 如果0 <= k <n和0 <= h <m

    • 对于范围i-1至i + 1的k

    • res [i,j]:= [0,1,当s与3相同时为真]

    • res [i,j]:= 1

    • 对于范围j-1至j + 1中的h

    • s:= s +矩阵[k,h]

    • 如果0 <= k <n和0 <= h <m

    • 对于范围i-1至i + 1的k

    • 如果s是3或4,则

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

    • 返回资源

    让我们看下面的实现以更好地理解:

    示例

    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]]
    猜你喜欢