一、问题描述
给定一个 8 x 8
的棋盘,只有一个 白色的车,用字符 'R'
表示。棋盘上还可能存在白色的象 'B'
以及黑色的卒 'p'
。空方块用字符 '.'
表示。
车可以按水平或竖直方向(上,下,左,右)移动任意个方格直到它遇到另一个棋子或棋盘的边界。如果它能够在一次移动中移动到棋子的方格,则能够 吃掉 棋子。
注意:车不能穿过其它棋子,比如象和卒。这意味着如果有其它棋子挡住了路径,车就不能够吃掉棋子。
返回白车 攻击 范围内 兵的数量。
示例 1:
输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]] 输出:3 解释: 在本例中,车能够吃掉所有的卒。
示例 2:
输入:[[".",".",".",".",".",".",".","."],[".","p","p","p","p","p",".","."],[".","p","p","B","p","p",".","."],[".","p","B","R","B","p",".","."],[".","p","p","B","p","p",".","."],[".","p","p","p","p","p",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]] 输出:0 解释: 象阻止了车吃掉任何卒。
示例 3:
输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","p",".",".",".","."],["p","p",".","R",".","p","B","."],[".",".",".",".",".",".",".","."],[".",".",".","B",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."]] 输出:3 解释: 车可以吃掉位置 b5,d6 和 f5 的卒。
import collections
from heapq import heapify, heappop, heappush
from math import inf
from typing import List, Counter
from typing import Optional
from clang.cindex import Configfrom pyasn1.compat.octets import null
board= [[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
class Solution:def numRookCaptures(self, board: List[List[str]]) -> int:m, n, k = 0, 0, 0for i in range(8):for j in range(8):if board[i][j] == "R":m = in = jbreakdx, dy = [0,1,0,-1],[1,0,-1,0]for i in range(4):step = 1while True:tx = m + step * dx[i]ty = n + step * dy[i]if tx < 0 or ty < 0 or tx >= 8 or ty >= 8 or board[tx][ty] == "B":breakif board[tx][ty] == "p":k += 1breakstep += 1return kS = Solution()
print(S.numRookCaptures(board))
二、结果展示
3
在矩阵中上下左右移动可以参考迷宫问题https://blog.csdn.net/lebrongao/article/details/143249610?spm=1001.2014.3001.5501