Python 中的骑士进攻
pythonserver side programmingprogramming更新于 2025/12/27 5:32:17
假设我们有一个二维二进制矩阵,表示一个矩形棋盘,其中 0 表示空格,1 表示骑士。骑士可以水平移动两个方格,垂直移动一个方格,或者垂直移动两个方格,水平移动一个方格(就像棋盘上的骑士一样)。我们必须检查是否有两个骑士在互相攻击。
因此,如果输入如下
| 0 | 0 | 0 | 0 | |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 |
然后输出将为 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
- 如果 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

