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

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

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

  • 任何生命细胞都有两个或三个生命邻居存活。

  • 任何死细胞都有三个生命邻居变成活细胞。

  • 所有其他的细胞死亡。

所以,如果输入如下:

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

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

  • 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相同的情况下为true]

      • 否则,

      • 对于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]]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程