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

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.