Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tấn công của quân Mã (Knights' Attack) trong Python


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:

00000
01000
00010
Đầu ra 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.
  • 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