骑士对Python的攻击

假设我们有一个二维二进制矩阵,表示一个矩形棋盘,这里0表示空单元格,1表示骑士。骑士可以水平移动两个正方形,垂直移动一个正方形,或者垂直移动两个正方形,水平移动一个正方形(就像棋盘骑士一样)。我们必须检查是否有两个骑士在互相攻击。

所以,如果输入像

00000
01000
00010

然后输出将为True

为了解决这个问题,我们将遵循以下步骤-

  • row,col:=矩阵的行数,矩阵的列数

  • 对于范围0到第1行的r,执行

    • 如果A [r] [c]不为零,则

    • 如果nr在行范围内且nc在col范围内且A [nr,nc]为非零,则

    • 返回True

    • 对于[(r + 1,c-2),(r + 1,c + 2),(r + 2,c-1),(r + 2,c + 1)]中的每个nr,nc

    • 对于0到col-1范围内的c,执行

    • 返回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