Giả sử chúng ta có một ma trận nhị phân 2D trong đó 1 có nghĩa là một ô sống và một 0 có nghĩa là một ô chết. Hàng xóm của một ô là các ô nằm ngang, dọc và chéo ngay lập tức của nó. Chúng ta phải tìm trạng thái tiếp theo của ma trận bằng cách sử dụng các quy tắc này
-
Bất kỳ ô sống nào có hai hoặc ba người hàng xóm sống chung sống.
-
Bất kỳ tế bào chết nào có ba người hàng xóm còn sống sẽ trở thành tế bào sống.
-
Tất cả các tế bào khác chết.
Vì vậy, nếu đầu vào giống như
1 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 0 | 1 |
thì đầu ra sẽ là
1 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 |
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:
-
n:=kích thước hàng của ma trận, m:=kích thước cột của ma trận
-
res:=ma trận kích thước n x m và điền bằng 0
-
đối với tôi trong phạm vi từ 0 đến n, hãy thực hiện
-
đối với j trong phạm vi từ 0 đến m, thực hiện
-
s:=0
-
nếu ma trận [i, j] giống 0 thì
-
đối với k trong phạm vi i - 1 đến i + 1, thực hiện
-
hoặc h trong phạm vi j - 1 đến j + 1, thực hiện
-
nếu 0 <=k
-
s:=s + ma trận [k, h]
-
-
-
-
res [i, j]:=[0, 1, true khi s giống với 3]
-
-
nếu không,
-
đối với k trong phạm vi i - 1 đến i + 1, thực hiện
-
đối với h trong phạm vi j - 1 đến j + 1, thực hiện
-
nếu 0 <=k
-
s:=s + ma trận [k, h]
-
-
-
-
nếu s là 3 hoặc 4 thì
-
res [i, j]:=1
-
-
-
-
-
trả lại res
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:
Ví dụ
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))
Đầu vào
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [1, 1, 0, 1] ]
Đầu ra
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0]]