news 2026/6/15 15:25:28

BFS与最短路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BFS与最短路径

BFS

基本步骤

要实现图的广度优先遍历,需要借助队列这一结构。

  1. 将入口顶点入队,同时标记为已访问
  2. 若队列不为空,则从队列中取出一个顶点访问
  3. 检查与该顶点相连的其它顶点,若没有被访问过则入队,同时标记为已访问
  4. 重复2、3步骤

示例代码

下面举一个例子:

#include<iostream>#include<vector>#include<queue>std::vector<std::vector<int>>g_Graph;staticvoidInput(){intvertexNums,edgeNums;std::cin>>vertexNums>>edgeNums;g_Graph.resize(vertexNums+1,std::vector<int>(vertexNums+1));intfrom,to,weight;for(size_t i=0;i<edgeNums;i++){std::cin>>from>>to>>weight;g_Graph[from][to]=weight;g_Graph[to][from]=weight;}}staticvoidBFS(){std::vector<bool>visited(g_Graph.size(),false);std::queue<int>queue;queue.push(1);visited[1]=true;intvertex;while(!queue.empty()){vertex=queue.front();queue.pop();std::cout<<vertex<<' ';for(size_t i=1;i<g_Graph.size();i++){if(!visited[i]&&g_Graph[vertex][i]!=0){queue.push(i);visited[i]=true;}}}std::cout<<std::endl;}intmain(){Input();BFS();return0;}

读者可以用这个代码自行测试。

BFS与无权图最短路径查找

BFS可以用于查找无权图的最短路径。BFS是层层递进进行遍历的,第一次访问某一个顶点的时候,此时经过的路径就是从起始顶点到该顶点的最短路径。

下面是示例代码:

staticstd::vector<std::vector<int>>g_Graph;staticvoidBFSGetShortestPath(intstart,inttarget){std::vector<bool>visited(g_Graph.size(),false);std::queue<int>queue;std::vector<int>parent(g_Graph.size(),-1);// 用于回溯路径,下标为顶点,元素为其上一个顶点queue.push(start);visited[start]=true;intvertex;while(!queue.empty()){vertex=queue.front();queue.pop();if(vertex==target)// 如果当前访问的顶点是目标顶点{std::vector<int>path;intcursor=target;while(cursor!=-1)// 通过parent获得路径{path.push_back(cursor);cursor=parent[cursor];}std::reverse(path.begin(),path.end());// 反转之后得到正确的路径for(auto&a:path)std::cout<<a<<' ';std::cout<<std::endl;return;}for(size_t i=1;i<g_Graph.size();i++)// 正常的BFS遍历操作{if(visited[i]==false&&g_Graph[vertex][i]!=0)// 遍历vertex的邻接顶点{queue.push(i);visited[i]=true;parent[i]=vertex;}}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:16:15

光学常数数据库:材料光学特性的数字基因库

光学常数数据库&#xff1a;材料光学特性的数字基因库 【免费下载链接】refractiveindex.info-database Database of optical constants 项目地址: https://gitcode.com/gh_mirrors/re/refractiveindex.info-database 当你设计一款新型光学镜头时&#xff0c;是否曾为找…

作者头像 李华
网站建设 2026/6/14 12:06:58

如何快速批量下载抖音视频:完整使用指南

如何快速批量下载抖音视频&#xff1a;完整使用指南 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 还在为喜欢的抖音视频无法批量保存而苦恼吗&#xff1f;抖音批量下载助手正是你需要的解决方案。这款工具…

作者头像 李华
网站建设 2026/6/14 18:14:35

AMD Ryzen性能调优革命:解锁处理器潜能的完整实战手册

AMD Ryzen性能调优革命&#xff1a;解锁处理器潜能的完整实战手册 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

作者头像 李华
网站建设 2026/6/15 14:45:07

淘宝智能抢购系统:从手动拼网速到程序化制胜

在电商促销的激烈战场上&#xff0c;你是否曾经因为零点几秒的差距而与心仪商品失之交臂&#xff1f;当抢购倒计时归零的瞬间&#xff0c;手指的颤抖、心跳的加速&#xff0c;却往往换来"已售罄"的遗憾。今天&#xff0c;我们将带你走进一个全新的抢购时代——智能程…

作者头像 李华
网站建设 2026/6/15 13:26:00

原神抽卡数据分析终极指南:免费工具助你轻松掌握欧非曲线

原神抽卡数据分析终极指南&#xff1a;免费工具助你轻松掌握欧非曲线 【免费下载链接】genshin-wish-export biuuu/genshin-wish-export - 一个使用Electron制作的原神祈愿记录导出工具&#xff0c;它可以通过读取游戏日志或代理模式获取访问游戏祈愿记录API所需的authKey。 …

作者头像 李华
网站建设 2026/6/14 18:37:36

COM的线程模型(单元)或浏览器扩展中更复杂的通信模式

这个问题涉及操作系统级并发控制和浏览器安全架构。COM的线程模型是个历史复杂但设计精妙的话题&#xff0c;而浏览器扩展通信则体现了现代Web安全理念。需要从机制原理、实际应用和代码示例三个层面展开解释。 关于COM线程模型&#xff0c;需要解释清楚其设计哲学&#xff1a;…

作者头像 李华