Computer >> Máy Tính >  >> Lập trình >> Python

Cuộc tấn công của các hiệp sĩ bằng Python

Giả sử chúng ta có một ma trận nhị phân hai chiều, đại diện cho một bàn cờ hình chữ nhật, ở đây 0 là ô trống và 1 là quân mã. Hiệp sĩ có thể di chuyển hai hình vuông theo chiều ngang và một hình vuông theo chiều dọc, hoặc hai hình vuông theo chiều dọc và một hình vuông theo chiều ngang (giống như kỵ sĩ bàn cờ). Chúng tôi phải kiểm tra xem có bất kỳ hai hiệp sĩ nào đang tấn công mỗi bên không.

Vì vậy, nếu đầu vào giống như

0 0 0 0 0
0 1 0 0 0
0 0 0 1 0

Khi đó đầu ra sẽ là True

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • row, col:=số hàng của ma trận, số cột của ma trận
  • đối với r trong phạm vi từ 0 đến hàng-1, hãy thực hiện
    • đối với c trong phạm vi 0 đến col-1, thực hiện
      • nếu A [r] [c] khác 0, thì
        • cho mỗi nr, nc trong [(r + 1, c-2), (r + 1, c + 2), (r + 2, c-1), (r + 2, c + 1)] , làm
          • nếu nr trong phạm vi hàng và nc trong phạm vi col và A [nr, nc] khác 0, thì
            • trả về True
  • trả về Sai

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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