Python 中的骑士进攻

pythonserver side programmingprogramming更新于 2025/12/27 5:32:17

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

因此,如果输入如下

0000
01000
00010

然后输出将为 True

要解决这个问题,我们将遵循以下步骤 −

  • row, col := 矩阵的行数,列数矩阵
  • 对于 0 到行 1 范围内的 r,执行
    • 对于 0 到列 1 范围内的 c,执行
      • 如果 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

相关文章


有用资源