(广度优先搜索第一课)迷宫的最短路径 - BFS

给定一个大小为N*M的迷宫,由通道('.')和墙壁('#')组成,其中通道S表示起点,通道G表示终点,每一步移动可以达到上下左右中不是墙壁的位置。试求出起点到终点的最小步数。(本题假定迷宫是有解的)

(N,M<=100)

样例输入:

10 10

# S # # # # # # . #
. . . . . . # . . #
. # . # # . # # . #
. # . . . . . . . .
# # . # # . # # # #<
```markdown ### 普通文本型回答 你问:“BFS基本原理是哪个模块的知识,还有贪心算法?”——这是非常关键的问题!下面为你清晰梳理。 --- ### ✅ BFS广度优先搜索)属于哪个知识模块? **所属模块:图论 与 搜索算法** 更具体地说,它属于: > **基础算法 → 搜索技术 → 图的遍历算法** #### 常见应用场景: -最短路径(比如地图导航) - 解“最少几步能到达目标”的问题(如本题) - 迷宫寻路、单词接龙、数字变换等 #### 在课程中的位置: | 学习阶段 | 内容 | |--------|------| | 编程入门后 | 学习数组、循环、条件判断 | | 进阶阶段 | 开始学习 **搜索算法**(BFS 和 DFS) | | 算法课核心 | 图的遍历、最短路径BFS 是 Dijkstra 的特例) | 👉 所以你可以理解为:**BFS 是“用队列实现的一层一层向外探索”的方法** --- ### ✅ 贪心算法 属于哪个知识模块? **所属模块:算法设计与分析 → 经典算法策略** 更具体地说: > **贪心、动态规划、分治、回溯** 都是“算法设计思想” #### 贪心的核心思想: > 每一步都选择当前看起来最优的方案,希望最终结果也是最优。 🌰 例子:找零钱(用尽可能多的大面额) 但在某些情况下会失败(比如本题中只用91或101,却错过91+101=192这种组合) #### 在课程中的位置: | 阶段 | 内容 | |------|------| | 学完基础数据结构后 | 学习贪心策略 | | 常见题目 | 区间调度、霍夫曼编码、最小生成树(Prim/Kruskal)等 | --- ### 对比:BFS vs 贪心 | 特性 | BFS | 贪心 | |------|-----|-------| | 是否保证最优 | ✅ 是(只要搜到就是最少步数) | ❌ 不一定 | | 使用的数据结构 | 队列(先进先出) | 一般不需要特殊结构 | | 适合什么问题 | 最少操作步数、最短路径 | 有“贪心选择性质”的问题 | | 时间复杂度 | 较高(可能遍历很多状态) | 通常较低(直接计算) | | 实现难度 | 中等(需管理队列和标记) | 简单(一行判断) | --- ### 初学者学习建议 ❤️ #### 第一步:掌握 BFS - 先学会手动模拟过程(画图 + 列队列) - 写几个模板题: - 二叉树的层序遍历 - 数字变换问题(如 a→b,每次加1或乘2,求最少步数) - 理解 `dist[ ]` 数组的作用:记录“第一次到达某个数时用了多少步” #### 第二步:理解贪心 - 多做经典题: - 分发饼干(尽量满足更多孩子) - 区间调度(最多能安排多少会议) - 记住一句话:**贪心不一定对,必须证明才能用** #### 推荐学习顺序: ``` 数组/循环 → 函数/结构体 → 队列概念 → BFS模板 → 搜索类题目 → 贪心思想 → 动态规划 ``` --- ### 知识点 - **BFS原理**:利用队列逐层扩展,首次访问即最短路径,适用于状态转移问题- **贪心算法**:每步取局部最优,期望全局最优,但需验证正确性,否则易错。 - **算法分类思维**:搜索、贪心、动态规划是解决“最优解”问题的三大基本策略。 ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值