当前位置: 首页 > news >正文

【蓝桥杯】搜索算法:DFS/BFS

对比维度 BFS(广度优先搜索) DFS(深度优先搜索)
核心遍历方式 按层次遍历(离起点近的节点先访问) 深度优先(一条路径走到底再回溯)
数据结构 队列(FIFO) 栈/递归(LIFO)
空间复杂度 O(b^d)(b为分支因子,d为最短路径深度) O(bm)(m为最大深度,可能远大于d)
时间复杂度 O(V+E)(所有节点和边访问一次) O(V+E)(但实际可能因剪枝而更优)
最短路径保证 ✅ 首次到达即最短(无权图) ❌ 需遍历所有路径比较
内存消耗 较高(存储整层节点) 较低(仅存储当前路径)
实现复杂度 需手动维护队列 递归实现简洁,但可能栈溢出
场景分类 BFS更适合的情况 DFS更适合的情况
路径问题 无权图最短路径(迷宫、社交网络关系度) 所有路径输出(排列组合)、存在性判断
连通性 判断两点是否连通 强连通分量、拓扑排序、桥/割点检测
图类型 稠密图或最短路径深度小 树形结构、稀疏图或路径深度大
空间限制 节点层级少(广度小) 深度大但分支少(如线性结构)
典型应用 - 迷宫最短路径
- 社交网络好友推荐层级
- 网页爬虫按层级抓取
- 数独求解
- 排列组合问题
- 回溯算法(如八皇后)
- 文件系统遍历
问题类型 推荐算法 原因说明
迷宫最短路径 BFS 天然保证首次到达的路径最短
判断岛屿数量 DFS/BFS 连通区域检测,DFS递归写法更简洁
二叉树层次遍历 BFS 需按层输出结果
二叉树的最大深度 DFS 递归计算深度更直观
拓扑排序 DFS 后序遍历逆序即拓扑序
寻找图中所有路径 DFS 需回溯记录完整路径
双向广度优先搜索(Meet in Middle) BFS 优化搜索空间(如单词接龙问题)
用BFS当 用DFS当 可结合使用

需要最短路径(无权图)

问题与"层级"或"扩散"相关(如病毒传播模型)

目标节点预计离起点较近

需要遍历所有可能性(如排列组合)

问题具有递归性质(如树形问题)

内存有限且搜索深度可控

需要利用回溯特性(如棋盘类问题)

迭代加深搜索(IDS):DFS模拟BFS

双向BFS:起点和终点同时BFS

记忆化DFS:避免重复计算(如动态规划)

1. 迷宫问题(BFS)

1.1. 题目

给定一个N×M的二维矩阵表示一个迷宫,其中:

  • 'S'表示起点

  • 'E'表示终点

  • '.'表示可以通行的空地

  • '#'表示障碍物,不能通行

你需要编写程序,找出从起点到终点的最短路径,并输出最短路径的长度。如果无法到达终点,则输出-1。

输入格式

第一行包含两个整数N和M,表示迷宫的行数和列数。
接下来N行,每行包含M个字符,表示迷宫的具体布局。

输出格式

一个整数,表示从起点到终点的最短路径长度。如果无法到达,输出-1。

样例输入

5 5
S....
###.#
.....
.#.##
....E

样例输出

相关文章:

  • R Excel 文件:高效数据处理与可视化工具的完美结合
  • 图形裁剪算法
  • 深度学习天崩开局
  • docker 安装 awvs15
  • 计算机面试八股(自整)
  • 历年跨链合约恶意交易详解(四)——Chainswap20210711
  • 什么是EXR透视贴图 ?
  • 【云计算】打造高效容器云平台:规划、部署与架构设计
  • Linux第四章练习
  • 【Docker基础】--查阅笔记1
  • C语言中单链表操作:查找节点与删除节点
  • 滑动窗口例题
  • 通过 axios 请求回来的 HTML 字符串渲染到 Vue 界面上并添加样式
  • 五分钟快速清晰理解作用域和闭包以及封装
  • CPU 压力测试命令大全
  • 问问lua怎么写DeepSeek,,,,,
  • 基于连接池与重试机制的高效TDengine写入方案
  • IDEA 使用Maven打包时内存溢出
  • 服务器虚拟化技术深度解析:医药流通行业IT架构优化指南
  • 基于 Spring Boot 瑞吉外卖系统开发(二)
  • 七猫征文大赛颁出112万奖金,非遗题材作品斩获金奖
  • 关税互降后的外贸企业:之前暂停的订单加紧发货,后续订单考验沟通谈判能力
  • 俄乌官员即将在土耳其会谈,外交部:支持俄乌开启直接对话
  • 国家卫生健康委通报关于肖某引发舆情事件调查处置进展情况
  • 申论|空间更新结合“青银共生”,助力青年发展型城区建设
  • 国际奥委会举办研讨会,聚焦如何杜绝操纵比赛