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 時為真]
否則,
對於 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]]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP