LeetCode 130题:被围绕区域的BFS与DFS解法详解

发布时间:2026/8/3 11:47:09

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攻克十项菲尔兹奖级难题

2026/8/3 11:47:09

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

VC++6.0安装与配置指南:解决现代系统兼容性问题

VC++6.0安装与配置指南:解决现代系统兼容性问题

2026/8/3 11:37:08

1. 项目概述:为什么今天还要折腾VC6.0? 如果你在找VC6.0中文版的下载和安装教程,大概率不是出于怀旧,而是遇到了一个非常具体且现实的问题:你需要维护、编译或者学习一个诞生于二十多年前的C/C项目。这个经典的开发环境…

2026平凉黄金回收白银回收铂金回收靠谱临街实体公安备案支持到店核验门店联系方式推荐

2026平凉黄金回收白银回收铂金回收靠谱临街实体公安备案支持到店核验门店联系方式推荐

2026/8/3 11:37:08

2026平凉黄金白银铂金回收实测榜单|公安备案临街实体门店推荐 平凉黄金回收市场近年店铺遍地丛生,但行业套路层出不穷,不少市民变现时遭遇虚高报价、克扣损耗、未经同意熔金压价等问题。为帮助本地居民规避消费陷阱,小编实地走遍…

欧洲FBA头程怎么选?新手按货量品类挑最优方案

欧洲FBA头程怎么选?新手按货量品类挑最优方案

2026/8/3 12:37:11

新手做欧洲FBA头程,核心逻辑一句话讲透:小货走空运抢时效、大货走海运控成本、中等货量走铁运求平衡,再结合品类选合规渠道,少踩90%的坑。按货量级选渠道,成本时效双兼顾新手别盲目跟风选渠道,先看货量&…

面试了十几个程序员,我发现会用AI的人反而更难拿offer

面试了十几个程序员,我发现会用AI的人反而更难拿offer

2026/8/3 12:37:11

聊《我重新梳理程序员就业后,先删掉了这些无效投入》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要去年我开始做技术面试,今年更明显。很多人简历上写着"熟悉Claude Code、Codex&a…

合同智能审查落地难?(2024金融/律所实测TOP5开源+商用工具横向评测)

合同智能审查落地难?(2024金融/律所实测TOP5开源+商用工具横向评测)

2026/8/3 12:37:11

更多请点击: https://kaifayun.com 第一章:AI 合同要素提取 AI 合同要素提取是法律科技(LegalTech)领域中自然语言处理(NLP)技术落地的关键场景,其核心目标是从非结构化合同文本中自动识别并抽…

微信聊天记录导出工具WeChatExporter:永久保存珍贵对话的专业方案

微信聊天记录导出工具WeChatExporter:永久保存珍贵对话的专业方案

2026/8/3 12:37:11

微信聊天记录导出工具WeChatExporter:永久保存珍贵对话的专业方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信已成为我们生活…

从零打造AI Agent:2026年最完整的开发实战指南

从零打造AI Agent:2026年最完整的开发实战指南

2026/8/3 12:37:11

## 前言:为什么所有人都在聊Agent?2025年,ChatGPT让所有人知道了LLM。 2026年,所有人都在问同一个问题:**怎么做一个属于自己的AI Agent?**这不是追热点。我见过太多人学了一堆理论,真正动手时还…

终极指南:如何用bilibili-downloader轻松下载B站4K大会员视频

终极指南:如何用bilibili-downloader轻松下载B站4K大会员视频

2026/8/3 12:27:11

终极指南:如何用bilibili-downloader轻松下载B站4K大会员视频 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为网络不…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/3 4:49:52

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/2 0:04:43

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/2 0:04:43

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

从提示词小白到AI内容架构师(20年技术老兵的6阶能力跃迁图谱,仅剩最后87个免费解读名额)

从提示词小白到AI内容架构师(20年技术老兵的6阶能力跃迁图谱,仅剩最后87个免费解读名额)

2026/8/3 0:06:20

更多请点击: https://codechina.net 第一章:AI写作能力跃迁的认知革命 过去五年,AI写作已从“模板填充”迈入“语义共建”阶段——模型不再仅复述训练数据中的句式,而是基于跨文档推理、意图锚定与风格自适应,动态构建…

AU-48八米拾音的信噪比衰减与降噪门限耦合分析

AU-48八米拾音的信噪比衰减与降噪门限耦合分析

2026/8/3 0:06:20

一、"拾音 8 米"这个指标该怎么读AU-48 的规格里,麦克风拾取范围写的是 10cm-800cm,配合 T1/T2 参数切换可选四档:中距离 0.5-2m、近距离 0.1-0.2m、远距离 0.5-5m、超远距离 0.5-8m。"能拾音 8 米"这句话本身没错&#…

LangChain 从 Demo 到团队落地,真正卡壳的是哪一步?

LangChain 从 Demo 到团队落地,真正卡壳的是哪一步?

2026/8/3 0:06:20

聊《LangChain并不难,难的是知道什么时候不该用》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。 摘要 摘要:很多人学 LangChain 都是从调个 API 开始,跑通一个 Demo 觉得挺简单…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/2 17:06:42

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/3 7:25:44

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/3 2:41:27

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…