news 2026/4/24 5:47:43

图论_图的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/4/22 10:19:13

视频流畅度优化全攻略:3步告别卡顿困扰

视频流畅度优化全攻略&#xff1a;3步告别卡顿困扰 【免费下载链接】Squirrel-RIFE 项目地址: https://gitcode.com/gh_mirrors/sq/Squirrel-RIFE 您是否曾经遇到过这样的困扰&#xff1a;精心制作的视频在播放时总是显得卡顿不流畅&#xff0c;明明内容精彩却因为画面…

作者头像 李华
网站建设 2026/4/20 16:13:36

GPT-SoVITS能否替代专业配音?业内专家这样说

GPT-SoVITS&#xff1a;当AI语音克隆遇上专业配音&#xff0c;界限正在模糊 在某短视频工厂的后台&#xff0c;一条新的脚本刚完成编辑&#xff0c;不到10秒后&#xff0c;一段自然流畅、带有特定人物音色的中文语音就已生成并自动合成为视频——整个过程无需录音师介入&#x…

作者头像 李华
网站建设 2026/4/20 13:48:34

13、安全与身份管理:策略与技术详解

安全与身份管理:策略与技术详解 1. JEA 配置基础 JEA(Just Enough Administration)是一种强大的权限管理技术,要让 JEA 正常工作,需要对配置文件进行一系列关键设置。 - 配置核心设置 - 修改 SessionType :将 SessionType 从默认设置改为 RestrictedRemoteSer…

作者头像 李华
网站建设 2026/4/23 19:04:33

SSHFS-Win Manager完全指南:Windows远程文件管理的图形化解决方案

SSHFS-Win Manager完全指南&#xff1a;Windows远程文件管理的图形化解决方案 【免费下载链接】sshfs-win-manager A GUI for SSHFS-Win (https://github.com/billziss-gh/sshfs-win) 项目地址: https://gitcode.com/gh_mirrors/ss/sshfs-win-manager 想要在Windows系统…

作者头像 李华
网站建设 2026/4/23 18:08:01

15分钟实战:基于Tiptap打造高性能实时协作编辑系统

15分钟实战&#xff1a;基于Tiptap打造高性能实时协作编辑系统 【免费下载链接】tiptap 项目地址: https://gitcode.com/gh_mirrors/tip/tiptap 还在为团队文档协作效率低下而头疼&#xff1f;多人同时编辑时频繁出现格式混乱、内容冲突、历史版本丢失等问题&#xff1…

作者头像 李华