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