Python 中骑士攻击
假设我们有一个二维二进制矩阵,表示矩形的棋盘,其中 0 表示空单元格,1 表示骑士。骑士可以横向移动两个方格,纵向移动一个方格,或者纵向移动两个方格,横向移动一个方格(就像棋盘上的骑士)。我们必须检查任意两个骑士是否互相攻击。
因此,如果输入如下:
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
则输出为 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
- 如果 nr 在行数范围内,nc 在列数范围内,且 A[nr, nc] 非零,则
- 对于每个 nr、nc 属于 [(r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)],执行
- 如果 A[r][c] 非零,则
- 对于 0 到行数-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
广告