news 2026/4/15 21:11:11

图论_图的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/3/27 16:03:11

14、Windows Server 2016:安全、身份验证与系统管理新特性

Windows Server 2016:安全、身份验证与系统管理新特性 1. 用户账户与访问权限 用户可以添加个人 Microsoft 账户,在不影响企业数据的前提下访问个人照片和文件,同时漫游设置仍可与工作账户配合使用。Microsoft 账户实现了单点登录(SSO),且不再驱动设置的漫游。此外,用…

作者头像 李华
网站建设 2026/4/14 11:57:59

一键克隆明星声音违法吗?基于GPT-SoVITS的法律风险提示

一键克隆明星声音违法吗&#xff1f;基于GPT-SoVITS的法律风险提示 在短视频平台&#xff0c;你是否见过这样的内容&#xff1a;周杰伦用美式英语唱《青花瓷》&#xff0c;郭德纲深情朗诵莎士比亚&#xff0c;或是某位已故主持人“复活”主持新节目&#xff1f;这些看似魔幻的…

作者头像 李华
网站建设 2026/4/15 17:26:08

信号发生器实现LTE调制信号输出的操作指南

如何用信号发生器精准输出LTE调制信号&#xff1f;一文讲透操作核心与实战要点你有没有遇到过这样的场景&#xff1a;调试一款4G终端模块时&#xff0c;网络信号不稳定&#xff0c;测试结果反复波动&#xff0c;根本没法判断是设备问题还是环境干扰&#xff1f;又或者在产线做接…

作者头像 李华
网站建设 2026/4/11 18:51:38

高速信号串扰抑制的PCB设计完整指南

高速信号串扰抑制的PCB设计实战指南&#xff1a;从原理到落地你有没有遇到过这样的情况&#xff1f;系统跑着跑着突然丢包&#xff0c;眼图闭合得像被压扁的花生壳&#xff1b;DDR5测试频频失败&#xff0c;地址线莫名其妙读错&#xff1b;千兆以太网PHY通信误码率居高不下………

作者头像 李华
网站建设 2026/4/10 0:21:42

上位机软件报警管理系统设计与实现

上位机软件报警管理系统&#xff1a;从设计到落地的实战解析在一间灯火通明的数字化车间控制室里&#xff0c;操作员正盯着多块监控大屏。突然&#xff0c;某个区域的温度曲线开始异常攀升——若不及时干预&#xff0c;可能导致整条生产线停机。此时&#xff0c;上位机系统并未…

作者头像 李华
网站建设 2026/4/11 0:39:39

Godot AI插件终极指南:三步开启智能游戏开发新时代

Godot AI插件终极指南&#xff1a;三步开启智能游戏开发新时代 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP 还在为繁…

作者头像 李华