题解 | #牛群的活动区域#
牛群的活动区域
https://www.nowcoder.com/practice/eabeca0c6e944a618f8adfed128d847e
- 题目考察的知识点 : 宽度优先搜索
- 题目解答方法的文字分析:
- 宽度优先搜索(BFS)遍历整个矩阵。我们首先将矩阵中与边界相邻的'B'入队,并将flag标记为已访问。然后,对队列中的元素进行BFS遍历,并将flag标记为已访问。最后,将未被标记过的'B'替换为'A'。
- 本题解析所用的编程语言: Python
- 完整且正确的编程代码
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param board char字符型二维数组
# @return char字符型二维数组
#
class Solution:
def solve(self, board: List[List[str]]) -> List[List[str]]:
m, n = len(board), len(board[0])
dirs = [(1, 0), (-1, 0), (0, 1), (0, -1)]
flag = [[False] * n for _ in range(m)]
queue = []
# 将矩阵中与边界相邻的'B'入队,并将flag标记为已访问
for i in range(m):
if board[i][0] == "B":
queue.append((i, 0))
if board[i][n - 1] == "B":
queue.append((i, n - 1))
for i in range(n):
if board[0][i] == "B":
queue.append((0, i))
if board[m - 1][i] == "B":
queue.append((m - 1, i))
# 对队列中的元素进行BFS遍历,并将flag标记为已访问
while queue:
x, y = queue.pop(0)
flag[x][y] = True
for dx, dy in dirs:
nx, ny = x + dx, y + dy
if (
0 <= nx < m
and 0 <= ny < n
and not flag[nx][ny]
and board[nx][ny] == "B"
):
queue.append((nx, ny))
# 将未被标记过的'B'替换为'A'
for i in range(m):
for j in range(n):
if not flag[i][j] and board[i][j] == "B":
board[i][j] = "A"
return board
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路
阿里云工作强度 727人发布

