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

【蓝桥杯】算法笔记5

对比维度 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

相关文章:

  • 【Metasploit】Metasploit安装及使用教程(非常详细)从零基础入门到精通,看完这一篇就够了。
  • 脑影像分析软件推荐 | NBS-Predict:基于脑网络的机器学习预测工具包
  • 蓝桥杯备赛 Day 19 加练dfs
  • 情感语音的“开源先锋”!网易开源
  • 一周学会Pandas2 Python数据处理与分析-NumPy数组重建
  • 【力扣hot100题】(055)子集
  • 开源情报中批判性思维因人工智能而逐渐衰落
  • 声音定位系统的原理及实现
  • 【Python使用】嘿马云课堂web完整实战项目第2篇:CMS页面管理需求,后端工程搭建【附代码文档】
  • ROS2学习笔记1-起步的程序
  • JVM 垃圾回收器是如何判断一个对象是否要回收?
  • 使用NVM下载Node.js管理多版本
  • Logo语言的扩展运算符
  • Linux学习笔记——零基础详解:什么是Bootloader?U-Boot启动流程全解析!
  • leetcode刷题日记—— Z 字形变换
  • BGP路由协议之属性2
  • RabbitMQ运维
  • 面试常被问道OSPF的问题
  • 针对Qwen-Agent框架的源码阅读与解析:FnCallAgent与ReActChat篇
  • uniapp小程序登录失效后操作失灵问题
  • 日本的广告网站/灰色关键词怎么做排名
  • 影视传媒公司网站模板/上海网站建设咨询
  • 做鸡尾酒的网站/百度官方网页版
  • 台州高端网站建设/seo怎么学在哪里学
  • 外贸原单童装哪个网站做/贵阳网站优化公司
  • 广告位招商怎么找客户/黑帽seo排名技术