Python 中骑士攻击


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

因此,如果输入如下:

00000
01000
00010

则输出为 True

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

  • 行数、列数表示矩阵的行数、列数
  • 对于 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

更新于:2020-09-23

209 人次浏览

启动你的 事业

完成课程并获得认证

开始
广告