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

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


สมมติว่าเรามีเมทริกซ์ mat มีค่าต่างๆ ดังนี้ เซลล์ของเมทริกซ์สามารถเก็บตัวอักษร 3 ตัวได้:

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

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

เช่น ถ้าอินพุตเป็น:

0020
0100
0200
0010

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

ในการแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:

  • r := จำนวนแถวของ mat
  • c := จำนวนคอลัมน์ของ mat
  • i := 0, j := 0, x := 0, y := 0
  • สำหรับ i ในช่วง 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
  • สำหรับ i ในช่วง 0 ถึง r - 1 ทำ
    • สำหรับ j ในช่วง 0 ถึง c - 1 ทำ
      • ถ้า mat[i, j] เป็น 2 แล้ว
        • คืนค่า False
  • คืนค่า 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