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

ตรวจสอบว่าศัตรูทั้งหมดถูกฆ่าด้วยระเบิดที่วางอยู่ในเมทริกซ์ใน Python


สมมุติว่าเรามีเมทริกซ์แมท มีค่าต่างกันเล็กน้อยดังนี้ เซลล์ของเมทริกซ์สามารถเก็บอักขระ 3 ตัวนี้ตัวใดก็ได้

  • 0 สำหรับพื้นที่ว่าง
  • 1 สำหรับระเบิด
  • 2 สำหรับศัตรู

ตอนนี้ระเบิดสามารถระเบิดได้เฉพาะในทิศทางแนวนอนและแนวตั้งจากปลายด้านหนึ่งไปยังอีกด้านหนึ่ง เราต้องตรวจสอบว่าศัตรูทั้งหมดจะตายเมื่อระเบิดหรือไม่

ดังนั้นหากอินพุตเป็นแบบ

0 0 2 0
0 1 0 0
0 2 0 0
0 0 1 0

จากนั้นผลลัพธ์จะเป็น True เพราะระเบิดที่ตำแหน่ง [1, 1] สามารถเติมศัตรูที่ตำแหน่ง [2, 1] และศัตรูที่ [0, 2] จะถูกฆ่าโดยการวางระเบิดที่ [3, 2]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • r :=จำนวนแถวของเสื่อ
  • c :=จำนวน col ของ mat
  • ผม :=0, j :=0, x :=0, y :=0
  • สำหรับฉันในช่วง 0 ถึง r - 1 ทำ
    • สำหรับ j ในช่วง 0 ถึง c - 1 ทำ
      • ถ้า mat[i, j] คือ 1 แล้ว
        • สำหรับ x ในช่วง 0 ถึง r - 1 ทำ
          • ถ้า mat[x, j] ไม่ใช่ 1 แล้ว
            • mat[x, j] :=0
        • สำหรับ y ในช่วง 0 ถึง c - 1 ให้ทำ
          • ถ้า mat[i, y] ไม่ใช่ 1 แล้ว
            • mat[i, y] :=0
  • สำหรับฉันในช่วง 0 ถึง r - 1 ทำ
    • สำหรับ j ในช่วง 0 ถึง c - 1 ทำ
      • ถ้า mat[i, j] คือ 2 แล้ว
        • คืนค่าเท็จ
  • คืนค่า True

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

ตัวอย่าง

def solve(mat):
   r = len(mat)
   c = len(mat[0])
   i, j, x, y = 0, 0, 0, 0
   for i in range(r):
      for j in range(c):
         if mat[i][j] == 1:
            for x in range(r):
               if mat[x][j] != 1:
                  mat[x][j] = 0
            for y in range(c):
               if mat[i][y] != 1:
                  mat[i][y] = 0
   for i in range(r):
      for j in range(c):
         if mat[i][j] == 2:
            return False
   return True
matrix = [ [0,0,2,0], [0,1,0,0], [0,2,0,0], [0,0,1,0] ]
print(solve(matrix))

อินพุต

[
[0,0,2,0],
[0,1,0,0],
[0,2,0,0],
[0,0,1,0]
]

ผลลัพธ์

True