广度优先搜索|130, 529

广度优先搜索|130. 被围绕的区域,529. 扫雷游戏

被围绕的区域

也是得倒流,做法和深度优先其实差不多。

python 复制代码
class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        def bfs(queue,board):
            while queue:
                x, y = queue.popleft()
                for k1,k2 in [[x+1,y],[x-1,y],[x,y+1],[x,y-1]]:
                    if 0<=k1<m and 0<=k2<n and board[k1][k2] == 'O':
                        queue.append([k1,k2])
                        board[k1][k2] = 'A'
            return board 
        
        m = len(board)
        n = len(board[0])
        queue = deque()
        for i in range(m):
            if board[i][0] == 'O':
                queue.append([i,0])
                board[i][0] = 'A'
            if board[i][n-1] == 'O':
                queue.append([i,n-1])
                board[i][n-1] = 'A'
        for j in range(n):
            if board[0][j] == 'O':
                queue.append([0,j])
                board[0][j] = 'A'
            if board[m-1][j] == 'O':
                queue.append([m-1,j])
                board[m-1][j] = 'A'

        
        board = bfs(queue,board)

        for i in range(m):
            for j in range(n):
                if board[i][j] == 'O':
                    board[i][j] = 'X'
                if board[i][j] == 'A':
                    board[i][j] = 'O'

扫雷游戏

这里没写visit数列,所以在列队走到那里之后还是要改成B防止他反复进列队。

python 复制代码
class Solution:
    def updateBoard(self, board: List[List[str]], click: List[int]) -> List[List[str]]:
        #direc = [[1,0],[-1,0],[0,1],[0,-1],[1,1],[-1,1],[-1,-1],[1,-1]]
        m = len(board)
        n = len(board[0])

        def empty(i,j):
            boom = 0
            for k1,k2 in [[i+1,j],[i-1,j],[i,j+1],[i,j-1],[i+1,j+1],[i-1,j+1],[i-1,j-1],[i+1,j-1]]:
                #x = i+k1
                #y = j+k2
                if (0<=k1<m and 0<=k2<n) and board[k1][k2] == 'M':
                    boom += 1
            return boom
        
        queue = deque() 
        queue.append([click[0],click[1]])

        while queue:
            x,y = queue.popleft()
            if board[click[0]][click[1]] == 'M':
                board[click[0]][click[1]] = 'X'
                return board  

            num_b = empty(x,y)
            if not num_b:
                board[x][y] = 'B'
            else:
                board[x][y] = str(num_b)
                continue

            for k1,k2 in [[x+1,y],[x-1,y],[x,y+1],[x,y-1],[x+1,y+1],[x-1,y+1],[x-1,y-1],[x+1,y-1]]:
                if 0<=k1<m and 0<=k2<n and board[k1][k2]=='E':
                    queue.append([k1,k2])
                    board[k1][k2] = 'B' #这里改B是因为改了之后这个点就不会重复进队了!
               
        return board
相关推荐
穿条秋裤到处跑几秒前
每日一道leetcode(2026.03.30):判断通过操作能否让字符串相等 II
算法·leetcode
Q741_1471 分钟前
每日一题 力扣 2840. 判断通过操作能否让字符串相等 II 力扣 2839. 判断通过操作能否让字符串相等 I 找规律 字符串 C++ 题解
c++·算法·leetcode·力扣·数组·找规律
LongJ_Sir1 分钟前
视觉识别算法demo
python
不怕犯错,就怕不做3 分钟前
Linux中的IS_ENABLED 函数实战使用demo
linux·驱动开发·嵌入式硬件
源远流长jerry4 分钟前
软件定义网络 SDN 核心技术深度解析:从概念到实践
linux·网络·架构
橙露4 分钟前
Linux 服务器性能排查:CPU / 内存 / 磁盘 / 网络一键定位
linux·服务器·网络
xu_wenming6 分钟前
在 TinyML 场景下,如何将模型从 FP32 量化为 INT8?
arm开发·算法·iot
智算菩萨7 分钟前
【论文复现】ML-MLM:基于PyTorch的多标签极小学习机完整复现教程(附GPT-5.4辅助科研提示词工程)
人工智能·pytorch·python·gpt·深度学习·论文笔记
csdn_aspnet9 分钟前
C++ 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
开发语言·c++·算法
Vertira13 分钟前
torch.eq、torch.ne、torch.gt、torch.lt、torch.ge、torch.le 等函数详解
pytorch·python·深度学习