สมมติว่าเรามีเมทริกซ์ไบนารีสองมิติ แทนกระดานหมากรุกสี่เหลี่ยมผืนผ้า โดย 0 แทนเซลล์ว่าง และ 1 แทนม้า ม้าสามารถเคลื่อนที่ได้สองช่องแนวนอนและหนึ่งช่องแนวตั้ง หรือสองช่องแนวตั้งและหนึ่งช่องแนวนอน (เหมือนม้าในหมากรุก) เราต้องตรวจสอบว่ามีม้าสองตัวที่โจมตีกันหรือไม่
ตัวอย่าง
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 |
ผลลัพธ์จะเป็น True
ขั้นตอนการแก้ปัญหา
row, col:= จำนวนแถวของเมทริกซ์, จำนวนคอลัมน์ของเมทริกซ์- ลูป
rจาก 0 ถึงrow-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อยู่ในช่วงคอลัมน์ และA[nr][nc]ไม่เป็นศูนย์ ให้คืนค่าTrue
- ถ้า
- สำหรับแต่ละ
- ถ้า
- ลูป
- คืนค่า
False
การใช้งาน
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