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

BFS算法:逐层遍历,轻松搞定最短路径

一、上期回顾完成七大算法综合刷题自测基础算法体系全部落地掌握。今天学习BFS 广度优先搜索和 DFS 回溯对应主打逐层向外遍历擅长求无权图最短路径。二、BFS 核心原理遍历规则由近到远、一层一层扩散底层依托队列 queue先进先出特性核心优势第一次抵达目标点即为最短路径适用场景迷宫寻路、二叉树层序遍历、岛屿统计、无权图最短路三、BFS 通用解题步骤初始化队列起点入队标记已访问队列不为空逐层取出队首元素遍历当前元素所有相邻合法节点未访问则标记入队循环直到队列为空四、基础模板框架#include iostream #include queue #include vector using namespace std; // 方向数组上下左右 int dx[] {-1,1,0,0}; int dy[] {0,0,-1,1}; void bfs() { queue节点类型 q; 起点入队; 标记访问; while(!q.empty()) { auto cur q.front(); q.pop(); 遍历四个方向 { 坐标越界判断 未访问且合法 标记访问 新节点入队 } } }五、例题 1二叉树层序遍历struct TreeNode { int val; TreeNode *left, *right; TreeNode(int x):val(x),left(nullptr),right(nullptr){} }; #include vector vectorvectorint levelOrder(TreeNode* root) { vectorvectorint res; if(!root) return res; queueTreeNode* q; q.push(root); while(!q.empty()) { int size q.size(); vectorint layer; for(int i0;isize;i) { TreeNode* cur q.front(); q.pop(); layer.push_back(cur-val); if(cur-left) q.push(cur-left); if(cur-right) q.push(cur-right); } res.push_back(layer); } return res; }六、例题 2迷宫最短路径二维网格从起点走到终点只能上下左右移动求最少步数int m,n; int grid[105][105]; bool vis[105][105]; int dx[]{-1,1,0,0}; int dy[]{0,0,-1,1}; struct Node { int x,y,step; }; int bfs(int sx,int sy,int ex,int ey) { queueNode q; q.push({sx,sy,0}); vis[sx][sy] true; while(!q.empty()) { Node cur q.front(); q.pop(); // 到达终点返回步数 if(cur.x ex cur.y ey) return cur.step; for(int i0;i4;i) { int nx cur.x dx[i]; int ny cur.y dy[i]; // 边界障碍访问判断 if(nx0nxmny0nyn!vis[nx][ny]grid[nx][ny]0) { vis[nx][ny] true; q.push({nx,ny,cur.step1}); } } } return -1; }七、BFS 与 DFS 核心区别BFS队列、逐层遍历、天然最短路径、空间开销偏大DFS递归 / 栈、一路深入、适合枚举所有方案、易栈溢出八、今日核心总结BFS 依靠队列实现层级遍历就近优先搜索方向数组统一处理上下左右移动代码复用性高首次触达目标即为最短路径求步数首选 BFS必须设置访问标记避免重复遍历死循环常用场景层序遍历、迷宫、岛屿、无权最短路九、课后练习手写二叉树层序遍历 BFS 代码简单迷宫模型计算起点到终点最短步数
http://www.rkmt.cn/news/1366965.html

相关文章:

  • 递归算法:从入门到精通的实战指南
  • 79万中文医疗对话数据集:构建智能医疗问答系统的实战指南
  • DS4Windows:让PS4手柄在PC平台焕发新生的终极解决方案
  • 5分钟快速上手:DDrawCompat让经典游戏在现代Windows上流畅运行的终极方案
  • 5分钟极速备份:B站缓存视频永久保存完整指南
  • 北大:细粒度知识获取基准FIKA-BENCH
  • FFmpegGUI:5分钟掌握跨平台视频处理的终极免费方案
  • 如何快速掌握游戏逆向工程:FromSoftware资源解析终极指南
  • 为 OpenClaw 配置 Taotoken 作为后端 AI 提供商的详细步骤
  • ChatGPT记忆功能深度解析(2024官方API文档未公开的7个底层机制)
  • 如何在Matlab中调用大模型API使用Taotoken实现智能对话
  • 对抗攻击下机器学习鲁棒性:从数据投毒到可攻击区域的理论与实践
  • 如何用PowerToys Text Extractor的3个技巧实现精准文字提取
  • 2026闭眼入!5款AI论文软件亲测,打破思路枯竭,初稿半天搞定
  • 英雄联盟终极自动化工具:5分钟快速上手League Akari完整指南
  • VPKEdit:终极跨平台包文件管理工具,3步快速上手游戏资源编辑
  • 百度网盘直链解析:告别限速的Python神器实战指南
  • 2026年CK美学木作高端整木定制口碑实力深度解析 - 打我的的
  • DDrawCompat完整指南:三步解决经典游戏在现代Windows上的兼容性问题
  • 如何彻底摆脱极域电子教室控制:JiYuTrainer终极破解指南
  • 内丘县2026最新黄金回收本地口碑商家榜:黄金首饰+白银+铂金+彩金回收门店及联系方式推荐 - 前途无量YY
  • PvZ Toolkit:植物大战僵尸PC版终极修改器使用指南 [特殊字符]
  • 肇庆厂房搬家公司口碑排行 实测靠谱搬迁商家推荐 - 从来都是英雄出少年
  • 突破4:3限制:Rust内存注入技术实现《植物大战僵尸》宽屏革命
  • FFmpegGUI终极指南:免费跨平台视频处理工具快速上手
  • 3步解锁Heightmapper:从地图到3D地形的终极转换指南
  • DTW与K-means在供暖负荷时间序列聚类中的工程实践与评估
  • IF 9.0!浙大医学院学者这样做轨迹分析就发了一区TOP,思路让人直呼精彩| 一周好文汇总
  • 宁晋县2026最新黄金回收本地口碑商家榜:黄金首饰+白银+铂金+彩金回收门店及联系方式推荐 - 前途无量YY
  • 3个核心场景:StreamFX如何让OBS直播从普通到专业级视觉体验