Cho ma trận nhị phân hai chiều đại diện cho bàn cờ chữ nhật, 0 là ô trống, 1 là quân Mã. Quân Mã di chuyển như cờ vua: 2 ô ngang 1 ô dọc hoặc 2 ô dọc 1 ô ngang. Kiểm tra xem có hai quân Mã nào đang tấn công nhau không.
Ví dụ ma trận:
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 |
True.
Các bước giải quyết:
row, col:= số hàng, số cột của ma trận.- Duyệt từng ô
(r,c):- Nếu
A[r][c] != 0:- Kiểm tra 4 vị trí có thể tấn công:
(r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1). - Nếu vị trí đó trong phạm vi và có quân Mã (
A[nr][nc] != 0), trả vềTrue.
- Kiểm tra 4 vị trí có thể tấn công:
- Nếu
- Trả về
False.
Ví dụ minh họa
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))
Đầu vào
[[0,0,0,0,0], [0,1,0,0,0], [0,0,0,1,0]]
Đầu ra
True