LeetCode 130题:被围绕区域的BFS与DFS解法详解
1. 问题背景与核心挑战LeetCode 130题被围绕的区域是矩阵遍历类问题的经典代表要求将二维矩阵中被X完全包围的O区域全部替换为X。这个看似简单的问题实则暗藏多个算法考察点尤其适合用来检验对广度优先搜索(BFS)和深度优先搜索(DFS)的理解深度。问题的关键难点在于如何高效识别被包围的区域。直接遍历矩阵中心区域判断每个O是否被包围的方法时间复杂度高达O(n^4)完全不可行。经过分析可以发现任何与边界相连的O区域都不可能被包围这个逆向思维是解题的突破口。因此正确解法应该首先标记所有边界相连的O区域然后遍历内部区域处理真正的被包围区域最后恢复被标记的边界区域这种标记-处理-恢复的三段式解法思路将原本O(n^4)的时间复杂度优化到了O(n^2)是典型的空间换时间策略。下面我们具体看两种实现方式。2. BFS解法详解2.1 算法流程设计广度优先搜索采用队列数据结构按层遍历与边界O相连的所有区域。具体步骤初始化队列将所有边界上的O坐标入队创建相同大小的标记矩阵记录需要保留的O标准BFS循环出队一个坐标检查四个方向的相邻格子如果是O且未被标记则标记并入队二次遍历矩阵未被标记的O改为X被标记的O保持原样from collections import deque def solve(board): if not board: return rows, cols len(board), len(board[0]) queue deque() # 步骤1收集边界O for r in range(rows): for c in [0, cols-1]: if board[r][c] O: queue.append((r,c)) for c in range(cols): for r in [0, rows-1]: if board[r][c] O: queue.append((r,c)) # 步骤2BFS标记 marked [[False]*cols for _ in range(rows)] while queue: r, c queue.popleft() if marked[r][c]: continue marked[r][c] True for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]: nr, nc rdr, cdc if 0nrrows and 0nccols and board[nr][nc]O: queue.append((nr,nc)) # 步骤3处理矩阵 for r in range(rows): for c in range(cols): if board[r][c] O and not marked[r][c]: board[r][c] X2.2 复杂度分析与优化时间复杂度O(mn) - 每个节点最多入队一次 空间复杂度O(mn) - 标记矩阵和队列的空间实际编码时可以优化空间使用直接在原矩阵上标记如将保留的O改为T使用位运算压缩标记矩阵对极大矩阵采用分块处理关键技巧在BFS中将坐标(i,j)编码为i*colsj可以提升缓存命中率这对大规模矩阵能带来约15%的性能提升3. DFS解法实现3.1 递归与迭代对比深度优先搜索有两种实现方式递归和迭代。递归写法简洁但存在栈溢出风险迭代写法稍复杂但更安全。递归版本def solve(board): if not board: return rows, cols len(board), len(board[0]) def dfs(r, c): if not (0rrows and 0ccols) or board[r][c] ! O: return board[r][c] T # 临时标记 dfs(r1, c) dfs(r-1, c) dfs(r, c1) dfs(r, c-1) # 从边界开始DFS for r in range(rows): for c in [0, cols-1]: dfs(r, c) for c in range(cols): for r in [0, rows-1]: dfs(r, c) # 处理矩阵 for r in range(rows): for c in range(cols): board[r][c] X if board[r][c] O else O迭代版本使用栈def solve(board): if not board: return rows, cols len(board), len(board[0]) stack [] # 收集边界O for r in range(rows): for c in [0, cols-1]: if board[r][c] O: stack.append((r,c)) for c in range(cols): for r in [0, rows-1]: if board[r][c] O: stack.append((r,c)) # DFS标记 while stack: r, c stack.pop() if 0rrows and 0ccols and board[r][c] O: board[r][c] T stack.append((r1,c)) stack.append((r-1,c)) stack.append((r,c1)) stack.append((r,c-1)) # 处理矩阵 for r in range(rows): for c in range(cols): board[r][c] X if board[r][c] O else O3.2 性能实测对比在LeetCode测试用例上的表现递归DFS平均92ms最大递归深度min(m,n)迭代DFS平均88ms空间占用更稳定BFS平均85ms适合广度较大的区域实际工程中选择建议对于规则网格BFS通常表现更好对于复杂拓扑结构DFS可能更合适4. 边界条件与特殊案例4.1 必须处理的异常情况空矩阵输入直接返回单行/单列矩阵所有元素都是边界全X矩阵无需任何处理全O矩阵全部变为X除非连接边界4.2 测试用例设计完整的测试应包含test_cases [ ([], []), # 空矩阵 ([[X]], [[X]]), # 1x1 ([[O,O],[O,O]], [[O,O],[O,O]]), # 全连接 ([[X,O,X],[X,O,X],[X,O,X]], [[X,O,X],[X,O,X],[X,O,X]]), # 边界连接 ([[X,X,X],[X,O,X],[X,X,X]], [[X,X,X],[X,X,X],[X,X,X]]) # 被包围 ]5. 算法扩展与变种5.1 并行化改造对于超大规模矩阵如1000x1000可以考虑将边界分区每个线程处理一段边界使用原子操作或锁保证标记正确性最终合并结果5.2 其他应用场景类似的连通区域分析算法还可用于图像处理中的前景提取棋盘类游戏的区域判定地图导航中的可达区域计算电路设计中的短路检测6. 工程实践建议预处理优化先检查四个角点如果都是X可以直接跳过对应行列的边界检查内存布局对于C实现按行优先存储矩阵可提升缓存命中率多语言实现Go语言的协程版本能获得更好的并发性能调试技巧在标记阶段打印中间矩阵状态可视化检查标记过程实际面试中面试官可能会追问如何证明你的算法是正确的如果矩阵太大内存放不下怎么办如何扩展到三维矩阵的情况这些问题的准备方向正确性证明数学归纳法边界条件覆盖大矩阵处理分块加载多趟扫描三维扩展6方向遍历空间分割树优化

相关新闻

突发!OpenAI下一代AI攻克十项菲尔兹奖级难题

突发!OpenAI下一代AI攻克十项菲尔兹奖级难题

说得直白些:如果这些结果经受住整个学界的检验,那么单是今天的这一轮发布,便堪称现代史上相关领域单日跨度最大的一次飞跃!Claude Fable 5更是直言:「按照菲尔茨奖标准,任何一项都足以获奖」! OpenAI还有大…

2026/8/3 11:47:41阅读更多 →
DFS算法实战:八皇后与数独求解优化技巧

DFS算法实战:八皇后与数独求解优化技巧

1. 深度优先搜索(DFS)算法基础 深度优先搜索(Depth-First Search)是解决回溯类问题的经典算法策略。它采用"一条路走到黑"的探索方式,沿着某条路径尽可能深入地搜索,直到无法继续前进时才回溯到上…

2026/8/3 11:47:41阅读更多 →
【AI写周报终极指南】:20年IT老兵亲授5步法,3分钟生成老板点赞的高价值周报

【AI写周报终极指南】:20年IT老兵亲授5步法,3分钟生成老板点赞的高价值周报

更多请点击: https://codechina.net 第一章:AI写周报的底层逻辑与价值认知 AI写周报并非简单地将文字拼接,而是基于自然语言生成(NLG)技术,对结构化数据、日志记录、项目管理平台API返回内容进行语义理解与…

2026/8/3 11:47:41阅读更多 →
合同审查准确率提升92.7%的秘密:我们用BERT微调+规则引擎双校验模型实测1372份采购协议

合同审查准确率提升92.7%的秘密:我们用BERT微调+规则引擎双校验模型实测1372份采购协议

更多请点击: https://kaifayun.com 第一章:AI合同审查教程 AI合同审查正逐步成为法务与合规团队的日常生产力工具。它并非替代律师,而是通过自然语言处理(NLP)与大语言模型(LLM)技术&#xff0…

2026/8/3 13:00:03阅读更多 →
Ghost系统备份还原实战:从原理到UEFI环境部署全解析

Ghost系统备份还原实战:从原理到UEFI环境部署全解析

1. 为什么今天还要用Ghost?一个老兵的现代价值 如果你在搜索引擎里敲下“系统备份还原”,跳出来的结果大概率是Windows自带的“系统映像备份”、各种第三方“一键还原”软件,或者云同步方案。但在这一片喧嚣中,有一个名字依然坚挺…

2026/8/3 13:00:03阅读更多 →
别再调参了!用因果推理重构AI数据分析逻辑:斯坦福实证+国产工具链适配方案(含可运行Notebook)

别再调参了!用因果推理重构AI数据分析逻辑:斯坦福实证+国产工具链适配方案(含可运行Notebook)

更多请点击: https://kaifayun.com 第一章:别再调参了!用因果推理重构AI数据分析逻辑:斯坦福实证国产工具链适配方案(含可运行Notebook) 传统机器学习建模长期困于“黑箱调参”范式——特征工程依赖经验、…

2026/8/3 13:00:03阅读更多 →
SpringBoot+Vue构建影视购票平台的技术实践

SpringBoot+Vue构建影视购票平台的技术实践

1. 项目概述:万象影视购票平台的技术架构 万象影视购票平台是一个典型的现代前后端分离应用,采用SpringBootVue技术栈构建。这个组合在当下企业级应用开发中非常流行——SpringBoot提供稳健的后台服务,Vue则负责构建灵活的前端交互界面。平台…

2026/8/3 13:00:03阅读更多 →
游戏直播节目效果解析:从双人协作到社群传播的流量密码

游戏直播节目效果解析:从双人协作到社群传播的流量密码

1. 先搞清楚这标题到底在说什么:一场“节目效果”拉满的直播游戏对局看到这个标题,第一反应可能是“这都什么跟什么?”。别急,我来帮你拆解一下。这本质上描述的是一场游戏直播,核心看点不是技术教学,而是“…

2026/8/3 13:00:03阅读更多 →
基于Hadoop的新能源汽车销量数据分析系统

基于Hadoop的新能源汽车销量数据分析系统

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 12:58:02阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 0:29:53阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/3 0:33:53阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/3 0:20:37阅读更多 →
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:32阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/3 2:32:59阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/3 2:33:01阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/3 2:33:04阅读更多 →