news 2026/5/10 22:51:55

图论_图的DFS和BFS

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
图论_图的DFS和BFS

图的dfs和bfs与树的dfs和bfs思想相同,dfs用递归实现,bfs用队列实现,但为了避免图中的重复遍历,需要引入visited数组来标志顶点是否访问过

visited中每个顶点的下标与顶点在V集数组中的下标相同,每次遍历之前都要初始化为false

初始化visited:

void initVisited(bool visited[]){ memset(visited,0,sizeof(visited)); }

邻接矩阵和邻接表的遍历思路都基本相同,只是找邻接点的方式不一样

DFS

每次访问顶点后把visited数组中顶点对应的单元更改为ture,然后递归地遍历该节点地所有未访问过(在visited中标志为false)的邻接点

假设是连通图强连通图

  • 邻接矩阵:找v的邻接点时遍历v在矩阵中的所有出度,即遍历第v行

    void dfs(MGraph* graph,int v){ //传入一个起点 visit(v); //访问行为 visited[v]=true; for(int i=0;i<graph->vertexNum;i++){ //找未访问过邻接点 if(graph->V[v][i]!=0&&graph->V[v][i]!=INFI&&visited[i]==false){ dfs(graph,i); } } }
  • 邻接表:找v的邻接点时直接遍历节点v的出度链表

    void dfs(LGraph* graph,int v){ visit(v); //访问行为 visited[v]=ture; Edge* p=graph->V[v].firstEdge; while(p){ //找未访问过的邻接点 if(visited[p->id]==false){ dfs(graph,p->id); } p=p->next; } }

BFS

每次访问队首顶点后把visited数组中顶点对应的单元更改为ture,然后出队,并把v节点的所有未访问过邻接点入队,重复下一次循环

假设是连通图强连通图

  • 邻接矩阵

    void bfs(MGraph* graph,int x){ //从x开始 queue<int> q; //队列 q.push(x); //先把起点入队 while(!q.empty()){ int v=q.front(); q.pop(); visit(v); //访问行为 visited[v]=true; for(int i=0;i<graph->vertexNum;i++){ //找未访问过邻接点 if(graph->V[v][i]!=0&&graph->V[v][i]!=INFI&&visited[i]==false){ q.push(i); } } } }
  • 邻接表

    void bfs(LGraph* graph,int x){ //从x开始 queue<int> q; //队列 q.push(x); //先把起点入队 while(!q.empty()){ int v=q.front(); q.pop(); visit(v); //访问行为 visited[v]=true; Edge* p=graph->V[v].firstEdge; while(p){ //找未访问过的邻接点 if(visited[p->id]==false){ q.push(p->id); } p=p->next; } } }

非连通图或非强连通图的遍历

需要在遍历外面套一层循环,对图中每个visited不为ture的节点遍历

void traversal(MGraph* graph){ //邻接表同理 for(int i=0;i<graph->vectorNum;i++){ if(visited[i]==false){ dfs(graph,i); //bfs同理 } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 19:33:19

IndexTTS2情感语音合成终极指南:从技术困惑到实战精通

IndexTTS2情感语音合成终极指南&#xff1a;从技术困惑到实战精通 【免费下载链接】index-tts An Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System 项目地址: https://gitcode.com/gh_mirrors/in/index-tts "为什么我的语音合成总是缺…

作者头像 李华
网站建设 2026/5/10 22:51:27

电力电子仿真必备:Pspice安装与验证完整示例

电力电子仿真实战入门&#xff1a;手把手搭建Pspice环境并验证Buck电路你是不是也遇到过这种情况——刚下定决心学电力电子仿真&#xff0c;结果第一步“安装Pspice”就卡了三天&#xff1f;提示“许可证无效”&#xff0c;打开发现MOSFET模型找不到&#xff0c;运行仿真直接报…

作者头像 李华
网站建设 2026/5/10 22:51:55

系统设计实战进阶:从面试失败到架构突破的心路历程

系统设计实战进阶&#xff1a;从面试失败到架构突破的心路历程 【免费下载链接】Grokking-System-Design Systems design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements. Systems design could…

作者头像 李华
网站建设 2026/5/10 22:51:29

嵌入式Linux工控平台could not find driver解决方案

嵌入式Linux工控平台“could not find driver”深度排查与实战修复在工业自动化现场&#xff0c;你是否遇到过这样的场景&#xff1a;设备上电后&#xff0c;HMI黑屏、数据采集服务报错、Modbus通信超时——深入日志一看&#xff0c;核心线索赫然写着&#xff1a;ads1115 1-004…

作者头像 李华
网站建设 2026/5/10 22:51:29

3分钟掌握B站专业直播:完全替代官方直播姬的终极方案

3分钟掌握B站专业直播&#xff1a;完全替代官方直播姬的终极方案 【免费下载链接】bilibili_live_stream_code 用于在准备直播时获取第三方推流码&#xff0c;以便可以绕开哔哩哔哩直播姬&#xff0c;直接在如OBS等软件中进行直播&#xff0c;软件同时提供定义直播分区和标题功…

作者头像 李华
网站建设 2026/5/9 10:13:03

ZLUDA:在AMD显卡上运行CUDA应用的全新解决方案

ZLUDA&#xff1a;在AMD显卡上运行CUDA应用的全新解决方案 【免费下载链接】ZLUDA CUDA on AMD GPUs 项目地址: https://gitcode.com/gh_mirrors/zlu/ZLUDA ZLUDA是一个革命性的开源项目&#xff0c;它让用户能够在AMD显卡上以接近原生的性能运行未经修改的CUDA应用程序…

作者头像 李华