Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm trạng thái tiếp theo của trạng thái ma trận ô tiếp theo trong Python?

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]]