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