news 2026/5/25 13:02:22

GESP6级C++考试语法知识(二十九、广度优先搜索(四、 图上 BFS))

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP6级C++考试语法知识(二十九、广度优先搜索(四、 图上 BFS))


第四课《交通王国——图上的 BFS》


🌟一、故事开始:交通王国的大麻烦

1、在🚇「交通王国」里,

有很多很多城市。


2、城市之间:

有公路连接。

例如:

1号城 —— 2号城 | | 3号城 —— 4号城

3、一天,小骑士阿勇接到任务:


🏰“请用最少的换乘次数到达终点城市!”


4、阿勇突然发现:


❓“咦?这已经不是迷宫了呀!”


5、没错!

今天:

我们正式进入:

🌟图上的 BFS!


🌟二、什么是“图”?

1、很多同学一听:

“图论”

就害怕。

其实:

图一点都不可怕!


2、🌟图是什么?

简单来说:


点 + 连接


就叫:

图(Graph)


3、例如:


(1)🚇地铁站

是点。


(2)🛣️道路

是连接。


(3)于是:

就形成了一张图。


🌟三、图和迷宫有什么区别?


1、🏰迷宫

位置固定:

上下左右

2、🚇图

连接不固定。

(1)例如:

1 可以到 3 1 也可以到 7

(2)所以:

图更加自由!


🌟四、图的表示方法

1、今天我们图的表示使用:

🌟邻接表!


2、🌟怎么表示:

(1)例如:

1号城市 连接: 2、3、5

(2)那么:

g[1] = {2,3,5}

(3)意思是:

从1号城市,

可以到:

  • 2

  • 3

  • 5


🌟五、为什么图也能用 BFS?

1、因为:


BFS 本质不是迷宫!


2、而是:

🌊“扩散搜索”


3、在图里:

也是:


从一个点,

一圈圈扩散。


4、例如:

从1号城市出发。


第1层

一步能到:

2 3

第2层

两步能到:

4 5 6

第3层

三步能到:

7 8

像不像:

🌊水波扩散?


🌟六、图上的 BFS 为什么能求最短路?

1、因为:


BFS 按层搜索!


第1层

1条边到达


第2层

2条边到达


第3层

3条边到达


所以:


第一次到达终点,

一定边数最少!


2、这叫:

🌟无权图最短路


🌟七、什么叫“无权图”?

1、简单理解:


每条路长度都一样!


2、例如:

每坐一站地铁,

算1次。


这时候:

BFS 很厉害!


🌟八、第一道图 BFS 题


🎮题目

有5座城市:

1 - 2 | | 3 - 4 - 5

问:

从1到5最少经过几条边?


🌟九、如何存图?


1、🌟邻接表代码

vector<int> g[100];

2、🌟加边

g[1].push_back(2); g[2].push_back(1);

3、表示:

1 和 2 连通。


4、🌟为什么加两次?

因为:

道路可以:

双向通行!


🌟十、图 BFS 的完整思路


🌊步骤


第一步

起点入队。


第二步

取出队头。


第三步

遍历所有邻居。


第四步

没访问过就入队。


🌟十一、参考程序


#include <iostream> #include <queue> #include <vector> using namespace std; vector<int> g[100]; bool vis[100]; struct Node { int id; int step; }; int main() { // 建图 g[1].push_back(2); g[2].push_back(1); g[1].push_back(3); g[3].push_back(1); g[2].push_back(4); g[4].push_back(2); g[3].push_back(4); g[4].push_back(3); g[4].push_back(5); g[5].push_back(4); queue<Node> q; // 起点 q.push({1,0}); vis[1] = true; while(!q.empty()) { Node cur = q.front(); q.pop(); int u = cur.id; // 到达终点 if(u == 5) { cout << "最少经过 " << cur.step << " 条路" << endl; break; } // 遍历邻居 for(int v : g[u]) { if(!vis[v]) { vis[v] = true; q.push({v, cur.step + 1}); } } } return 0; }

🌟十二、程序执行过程


1、开始:

队列: 1

2、扩展:

2 3

3、继续扩展:

4

4、继续:

5

5、第一次到达5:

就是最短!


🌟十三、图 BFS 的核心模板


🌊图 BFS 四步法


第一步

起点入队。


第二步

取出队头。


第三步

遍历邻居:

for(int v : g[u])

第四步

合法就入队。


🌟十四、visited 为什么依然重要?

1、假设:

1 ↔ 2

2、如果没有 visited:

会变成:

1 → 2 → 1 → 2 → 1

无限循环!


3、所以:


图 BFS 和迷宫 BFS 一样,

visited 必不可少!


🌟十五、图 BFS 和迷宫 BFS 的区别

迷宫 BFS图 BFS
上下左右移动按边连接移动
方向固定邻居不固定
用方向数组用邻接表

🌟但本质完全一样!


🌊都是:

一层一层扩散!


🌟十六、什么时候想到图 BFS?

以后看到:


1、🚇最少换乘


2、🛣️最短路径


3、👥社交关系传播


4、🌐网络连接


🌟就可以想到:

BFS!


🌟十七、课堂挑战题 ⚔️


🎮挑战1

有图:

1 - 2 - 3 | | 4 ----- 5

求:

1 到 5 最少几步?


🎮挑战2

如果:

有的边:

更长

怎么办?


提示:

目前学的BFS 不适合!


以后要学:

🌟Dijkstra!


🎮挑战3

如果:

地图是单向道路:

1 → 2

怎么办?


提示:

只加一条边!


🌟十八、本课最终总结


1、🌊图 BFS 本质:

在图中进行层层扩散!


2、📦核心工具:

queue 队列


3、🛣️BFS 最擅长:

无权图最短路!


4、🌟图的核心:

点 + 边


5、📚存图方式:

邻接表


6、🛑visited 必不可少:

防止重复搜索!


🌟今天真正学会的:

是:

“抽象关系中的 BFS 思维”。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 13:02:08

BME280传感器扩展板设计:兼容I2C/SPI接口与可配置电源方案详解

1. 项目概述&#xff1a;BME280传感器扩展板的设计与实现在嵌入式开发和物联网项目中&#xff0c;环境传感器是感知物理世界的基础。Bosch Sensortec的BME280是一款集成了温度、湿度和气压测量的高精度环境传感器&#xff0c;因其体积小巧、功耗低、精度高而广受欢迎。然而&…

作者头像 李华
网站建设 2026/5/25 13:01:37

Android 深度电量优化实战:聚焦后台任务、Alarm 与 WorkManager 的现代解决方案

引言:移动设备的能源困境与 Android 的应对策略 在移动计算领域,电量始终是制约用户体验的核心瓶颈之一。随着 Android 设备功能的日益丰富和用户对全天候在线的需求增长,如何高效管理设备能源消耗,尤其是后台行为的能耗,成为开发者面临的关键挑战。Android 系统自身也在…

作者头像 李华
网站建设 2026/5/25 13:01:33

如何免费激活Windows和Office:开源KMS激活工具的完整指南

如何免费激活Windows和Office&#xff1a;开源KMS激活工具的完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows或Office的激活问题而感到困扰&#xff1f;高昂的授权…

作者头像 李华
网站建设 2026/5/25 13:00:07

Frida逆向小程序云托管API通信链路实战

1. 这不是“破解”&#xff0c;而是理解小程序云托管通信链路的必经之路 你有没有遇到过这样的情况&#xff1a;在调试一个微信小程序时&#xff0c;发现它调用的云函数地址全是形如 https://xxx-yyy.cloudbase.net/xxx-api 的域名&#xff0c;但翻遍前端代码&#xff0c;只看…

作者头像 李华
网站建设 2026/5/25 12:57:28

2026年Hermes Agent/OpenClaw如何集成?阿里云高可用安装及Token Plan配置

2026年Hermes Agent/OpenClaw如何集成&#xff1f;阿里云高可用安装及Token Plan配置。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token P…

作者头像 李华