题解 | #牛群的活动区域#

牛群的活动区域

https://www.nowcoder.com/practice/eabeca0c6e944a618f8adfed128d847e

  • 题目考察的知识点 : 宽度优先搜索
  • 题目解答方法的文字分析:
  1. 宽度优先搜索(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题的解法思路

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务