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

GESP6级C++考试语法知识(二十六、广度优先搜索(一、认识BFS))

第一课《消息传播城——认识广度优先搜索 BFS》一、故事开始国王的紧急消息1、很久很久以前有一座叫「消息传播城」的大王国。2、有一天怪兽突然来袭国王必须立刻通知所有村庄“马上准备防御”3、可是问题来了王国太大了到底该怎么传消息最快呢二、两种不同的传消息方法国王找来了两位骑士。1、第一位DFS 骑士深度优先搜索1DFS 骑士特别执着。他会一条路冲到底2比如A → B → C → D走到头了才回来换路。3DFS 像什么像一根树枝爬到底这个方法我们前面课程已经学过了。2、️第二位BFS 骑士今天的新主角1BFS 骑士完全不同他会先通知离自己最近的所有人2然后这些人再继续通知别人。3就像水波扩散三、什么叫“广度优先”1、假设国王在村庄 A。2、A 能通知B、C、D然后B、C、D 再继续通知别人。3、于是传播顺序变成第一层A 第二层B C D 第三层E F G H 第四层……4、你发现了吗BFS 不是一条路走到底而是一圈一圈扩散四、BFS 为什么必须用队列这里就是今天最重要的地方1、我们前面已经学过队列Queue特点是先进先出FIFO2、例如排队买冰淇淋小明 → 小红 → 小刚谁先来谁先买。3、而 BFS 正需要这种规则因为谁先收到消息谁就应该先继续传播4、所以BFS 队列 扩散五、先看一个最简单的 BFS 游戏1、游戏规则数字跳跃你现在站在数字1目标是到达102、每次你可以1 或者 -13、问最少几步到达 10六、如果用 DFS 会怎样1、DFS 会1 → 2 → 3 → 4 → ……一直冲到达了。2、但是有时也会1 → 0 → -1 → -2跑偏了3、DFS 不擅长“最少步数”七、BFS 如何思考1、BFS 会这样2、第0层13、第1层一步能到0 24、第2层两步能到-1 1 1 3注意重复的数字不用再进入。5、第3层-2 0 2 4……6、最终第一次到达 10。7、为什么一定最短因为BFS 是按层扩散的8、第1次到达一定是最少步数八、visited 数组为什么重要1、这里是初学者最容易犯错的地方2、假设没有 visited。那么1 → 2 → 1 → 2 → 1 → 2会无限循环3、所以我们必须记录哪些位置已经来过。4、visited 的作用vis[x]表示x 是否访问过九、BFS 的完整流程BFS 四步法第一步起点进入队列q.push(start);第二步标记访问vis[start] true;第三步取出队头int x q.front(); q.pop();第四步扩展新位置把能到的新位置加入队列。十、第一份 BFS 程序1、题目从 1 走到 10。每次1-1求最少步数。2、参考程序#include iostream #include queue using namespace std; struct Node { int x; // 当前数字 int step; // 已经走了多少步 }; int main() { queueNode q; bool vis[100] {0}; // 起点入队 q.push({1, 0}); vis[1] true; while(!q.empty()) { // 取出队头 Node cur q.front(); q.pop(); // 到达终点 if(cur.x 10) { cout 最少步数 cur.step endl; break; } // 两种移动方式 int next1 cur.x 1; int next2 cur.x - 1; // 尝试 next1 if(next1 0 next1 20 !vis[next1]) { vis[next1] true; q.push({next1, cur.step 1}); } // 尝试 next2 if(next2 0 next2 20 !vis[next2]) { vis[next2] true; q.push({next2, cur.step 1}); } } return 0; }十一、程序执行过程1、初始队列 (1,0)2、取出13、加入0 24、再取出0继续扩展……5、像不像水波一圈圈扩散十二、BFS 和 DFS 的真正区别搜索方式像什么使用什么特点DFS一条路走到底栈/递归适合遍历BFS水波扩散队列擅长最短路十三、什么时候想到 BFS以后看到1、扩散病毒传播火焰蔓延消息通知2、️最少步数最少移动最短路径最少操作3、按层搜索一圈一圈找。4、就要想到BFS⚔️十四、课堂挑战题 ⚔️1、挑战1从3 → 15每次可以2 -1最少几步2、挑战2从5 → 17每次可以×2 1最少几步十五、本课最终总结1、BFS 的核心一圈一圈扩散2、BFS 要使用队列 Queue3、第一次到达终点一定最短4、visited 必不可少防止无限循环今天我们真正学会的不只是代码。而是BFS“层层扩散”的思维。
http://www.zskr.cn/news/1367919.html

相关文章:

  • 颠覆性GIF处理终极方案:Gifsicle深度解密
  • Backtrader止损策略终极指南:3种方法保护你的交易资金
  • 如何用WeChatMsg轻松永久保存微信聊天记录:新手完整指南
  • 创业公司如何借助Taotoken统一管理多个AI项目的API密钥
  • 在Nodejs后端服务中集成Taotoken实现多模型对话中继
  • 书匠策AI到底能帮你把毕业论文“省“到什么程度?一个科普博主的亲测报告
  • 书匠策AI:论文写作界的“开挂指南针“,教你用科技把毕业论文从地狱模式调成简单模式!
  • 毕业论文查重不花一分钱?书匠策AI这个免费功能,90%的同学还不知道!
  • 书匠策AI到底能帮你把毕业论文“拆解“成什么样?一个论文科普博主的实测报告
  • Loop:免费开源的macOS窗口管理终极方案,让桌面从此高效有序
  • 终极指南:如何在VSCode中打造你的私人投资情报中心
  • 利用 Taotoken 统一 API 简化多模型 A/B 测试的实验流程
  • 终极二维码修复工具:如何拯救损坏的QR码并恢复重要数据
  • 短视频爆款率提升2.8倍,ChatGPT文案生成全链路拆解,从选题→钩子→口播→结尾SOP
  • 终极GIF优化指南:如何用Gifsicle命令行工具快速压缩动画文件
  • 5分钟掌握中国车牌生成器:为AI训练提供无限车牌数据
  • Open5GS实战指南:5个步骤快速实现UE终端与核心网集成
  • B站缓存视频转换终极指南:3分钟学会m4s转MP4完整流程
  • 如何快速实现Minecraft游戏增强:NightX Client完整使用指南
  • Poppins字体:5分钟掌握免费多语言字体终极指南
  • KLayout 0.29.12版图编辑工具:DRC验证引擎性能提升20%与多工艺节点设计支持
  • 长期使用Taotoken Token Plan套餐的成本节约实际感受
  • 如何高效解密Wii U游戏文件:CDecrypt专业开发者的完整实战指南
  • AML启动器:XCOM 2模组管理终极解决方案
  • 【紧急预警】开源AI工具许可证升级潮来袭!GPLv3→SSPL→BSL,你的商用产品可能已违规(附合规自查清单)
  • 3分钟搞定视频无损转换:tsMuxer智能封装技术深度解析
  • NoFences:免费开源的Windows桌面分区管理终极指南
  • 5分钟免费解锁Mac运行Windows软件:Whisky终极指南
  • 如何在Windows上3分钟完成Dlib预编译包安装:告别繁琐编译的完整指南
  • Struts2 S2-061漏洞深度解析:OGNL沙箱绕过与零代码应急加固