Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาสถานะถัดไปของสถานะเมทริกซ์เซลล์ถัดไปใน Python?


สมมติว่าเรามีเมทริกซ์ไบนารี 2D โดยที่ 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

  • สำหรับผมอยู่ในช่วง 0 ถึง n ทำ

    • สำหรับ j ในช่วง 0 ถึง m ให้ทำ

      • s :=0

      • ถ้า matrix[i, j] เท่ากับ 0 แล้ว

        • สำหรับ k ในช่วง i - 1 ถึง i + 1 ทำ

          • หรือ h ในช่วง j - 1 ถึง j + 1 ทำ

            • ถ้า 0 <=k

              • s :=s + matrix[k, h]

        • res[i, j] :=[0, 1, true เมื่อ s เหมือนกับ 3]

      • มิฉะนั้น

        • สำหรับ k ในช่วง i - 1 ถึง i + 1 ทำ

          • สำหรับ h ในช่วง j - 1 ถึง j + 1 ทำ

            • ถ้า 0 <=k

              • s :=s + matrix[k, h]

        • ถ้า s เป็น 3 หรือ 4 แล้ว

          • res[i, j] :=1

  • ผลตอบแทน

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:

ตัวอย่าง

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