สมมติว่าเรามีเมทริกซ์ไบนารีสองมิติ แทนกระดานหมากรุกสี่เหลี่ยม โดยที่ 0 สำหรับช่องว่าง และ 1 สำหรับอัศวิน อัศวินสามารถเคลื่อนสี่เหลี่ยมออกไปสองช่องในแนวนอนและหนึ่งช่องในแนวตั้ง หรือสองช่องในแนวตั้ง และอีกหนึ่งช่องในแนวนอน (เช่น อัศวินกระดานหมากรุก) เราต้องเช็คก่อนว่ามีอัศวิน 2 คนโจมตีกันหรือไม่
ดังนั้นหากอินพุตเป็นแบบ
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
จากนั้นผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- แถว, col :=จำนวนแถวของเมทริกซ์, จำนวนคอลัมน์ของเมทริกซ์
- สำหรับ r ในช่วง 0 ถึงแถวที่ 1 ทำ
- สำหรับ c ในช่วง 0 ถึง col-1 ทำ
- ถ้า A[r][c] ไม่ใช่ศูนย์ ดังนั้น
- สำหรับแต่ละ nr, nc ใน [(r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)] , ทำ
- ถ้า nr อยู่ในช่วงของแถวและ nc อยู่ในช่วงของ col และ A[nr, nc] ไม่ใช่ศูนย์ ดังนั้น
- คืนค่า True
- ถ้า nr อยู่ในช่วงของแถวและ nc อยู่ในช่วงของ col และ A[nr, nc] ไม่ใช่ศูนย์ ดังนั้น
- สำหรับแต่ละ nr, nc ใน [(r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)] , ทำ
- ถ้า A[r][c] ไม่ใช่ศูนย์ ดังนั้น
- สำหรับ c ในช่วง 0 ถึง col-1 ทำ
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, A): row, col = len(A), len(A[0]) for r in range(row): for c in range(col): if A[r][c]: for nr, nc in ((r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)): if 0 <= nr < row and 0 <= nc <col and A[nr][nc]: return True return False ob = Solution() mat = [[0,0,0,0,0], [0,1,0,0,0], [0,0,0,1,0]] print(ob.solve(mat))
อินพุต
[[0,0,0,0,0], [0,1,0,0,0], [0,0,0,1,0]]
ผลลัพธ์
True