news 2026/6/10 15:33:11

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/10 11:56:52

Zotero SciPDF插件:科研文献获取的智能化解决方案

Zotero SciPDF插件&#xff1a;科研文献获取的智能化解决方案 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 在学术研究过程中&#xff0c;高效获取文献PDF是每位科…

作者头像 李华
网站建设 2026/6/10 11:56:40

RK3568设备改造实战:从闲置电视盒子到全能服务器

你是否曾经想过&#xff0c;家里那些被淘汰的安卓电视盒子其实蕴藏着巨大的潜力&#xff1f;今天&#xff0c;让我们一起探索如何将RK3568设备从娱乐终端改造成功能强大的Armbian服务器。 【免费下载链接】amlogic-s9xxx-armbian amlogic-s9xxx-armbian: 该项目提供了为Amlogic…

作者头像 李华
网站建设 2026/6/10 11:56:39

一键解锁文本绘图魔法:在draw.io中快速创建流程图的神器

一键解锁文本绘图魔法&#xff1a;在draw.io中快速创建流程图的神器 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 还在为手动调整流程图而烦恼吗&#xff1f;现在有了…

作者头像 李华
网站建设 2026/6/10 11:52:16

115proxy-for-kodi完整使用教程:解锁Kodi原码播放新体验

115proxy-for-kodi是一款专为Kodi媒体中心用户打造的115网盘原码播放服务插件&#xff0c;让您无需下载即可在Kodi中流畅播放115网盘的高清视频内容。本教程将为您提供从安装到使用的完整指南&#xff0c;帮助您快速掌握这款实用工具。 【免费下载链接】115proxy-for-kodi 115原…

作者头像 李华
网站建设 2026/6/10 9:15:43

OCRmyPDF批量处理技术实战:从单文件到海量PDF的自动化解决方案

面对堆积如山的扫描PDF文档&#xff0c;如何实现高效OCR批量处理&#xff1f;本文将通过OCRmyPDF工具&#xff0c;为您提供从基础到企业级的完整自动化解决方案。无论您处理的是几十份日常文件&#xff0c;还是成千上万的档案资料&#xff0c;都能找到适合的处理策略。 【免费下…

作者头像 李华
网站建设 2026/6/10 11:55:02

Draw.io Mermaid插件:用文本魔法快速创建专业图表

Draw.io Mermaid插件&#xff1a;用文本魔法快速创建专业图表 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 在当今数字化工作环境中&#xff0c;可视化图表已成为沟通…

作者头像 李华