图的常用遍历——广度优先遍历和深度优先遍历

2023-11-03

目录

 一、遍历图可能遇到的问题

二、图的常用遍历

三、深度优先遍历(DFS)

四、广度优先遍历(BFS)


 一、遍历图可能遇到的问题

图的特点:

图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。怎样避免重复访问?

解决思路:设置辅助数组visited[n],用来标记每个被访问过的顶点。初始状态visited [i]为0

顶点i被访问,改visited [i]为1,防止被多次访问。

二、图的常用遍历

1、深度优先搜索(DFS)

2、广度优先搜索(BFS)

三、深度优先遍历(DFS)

1、遍历的方法

■在访问图中某一起始顶点V后,由V出发,访问它的任一邻接顶点W1;

■再从W1出发,访问与W1邻接但还未被访问过的顶点W2;

■然后再从W2出发,进行类似的访问,......

■如此进行下去,直至到达所有的邻接顶点都被访问过的顶点u为止。

■接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点。

■如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问;

■如果没有,就再退回一步进行搜索。重复上述过程,直到连通图中所有顶点都被访问过为止。

连通图的深度优先遍历类似于树的先根遍历

2、邻接矩阵表示的无向图深度优先遍历的实现如下图所示:

 3、算法描述

void DFS(AMGraph G, int v){          //图G为邻接矩阵类型

cout<<V; visited[v] = true;  //访问第v个顶点,visited[v]是铺助数组,用于记录图中的结点是否访问过

for(w = 0; W< G.vexnum; W++)         //依次检查邻接矩阵v所在的行

if((G.arcs[v][w]!=0) && (!visited[w]))

DFS(G,w);                //w是v的邻接点,如果w未访问,则递归调用DFS

}

四、广度优先遍历(BFS)

1、方法:从图的某一结点出发, 首先依次访问该结点的所有邻点Vi1,Vi2 ,...,Vin再按这些顶点被访问的先后次序依次访问与它们相邻接的所有未被访问的顶点。重复此过程,直至所有结点都被访问为止。图的广度优先遍历和树的层次遍历相似。

2、典型例题

 3、邻接表表示的无向图广度优先遍历的实现

算法思路:借助了一个循环队列来存储要遍历的结点:如上图所示的无向图,首先访问V1结点并且将V1下的邻接点V2和V3入队,然后再访问V2结点并且将V2结点下的邻接点V4和V5,一直执行下去,直到辅助数组visited[n]全部标记为1为止访问完毕。

4、算法描述

void BFS (Graph G, int v){               //按广度优先非递归遍历连通图G
cout<<v; visited[v] = true;             //访问第v个顶点

InitQueue(Q);                          //辅助队列Q初始化,置空

EnQueue(Q v);                           //v进队

while(!QueueEmpty(Q)){                   //队列非空

DeQueue(Q,u);                           //队头元素出队并置为u

for(w = FirstAdjVex(G, u); w>=0; w = NextAdjVex(G, u, w))
//从第一条弧开始依次的去找结点,然后再找与下一条弧相连的节点。 
if(!visited[w]){                       //w为u的尚未访问的邻接顶点

count<<w; visited[w] = true; EnQueue(Q w); //w进队
       }//访问每个邻接点,访问完以后将每个邻接点入队

   }//while

}//BFS

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图的常用遍历——广度优先遍历和深度优先遍历 的相关文章

随机推荐

  • shell脚本学习-04

    65 IFS 文本分隔符 默认的文本分隔符是 但是可以手动设置为其他的 如 cities Delhi chennai bangaluru kolkata old ifs IFS IFS for place in cities do echo
  • Chrome 浏览器的 PDF 插件使用了 Foxit PDF SDK

    Chrome 浏览器的 PDF 插件使用了 Foxit PDF SDK 2010年8月22日 Chrome的内置PDF插件实际上有使用Foxit的PDF SDK 如果你查看这个网页会找到Chromium的一些PDF功能多次用到Foxit的S
  • 【C++】C++的四种类型转换

    文章目录 一 隐式类型转换和显示类型转换 二 C 的四种类型转换 2 1 static cast 相似转化 2 2 reinterpret cast 不同类型转化 2 3 const cast 去除const属性 2 4 dynamic c
  • 利用枚举类型变量求从5种颜色球中取3个不同颜色球的取法

    利用枚举类型变量求从5种颜色球中取3个不同颜色球的取法 C程序设计 第二版 谭浩强 著 11 9 例11 3 口袋里有红 黄 蓝 白 黑5种颜色的若干个 每次从口袋中取出3个球 问得到3种不同色的球的可能取法 输出每种排列的情况 程序 在V
  • CASAIM与南京航空航天大学在自动化叶片曲面分析系统开展合作,推动航空航天发动机零部件自动化3D检测进程

    近期 CASAIM与南京航空航天大学在自动化叶片曲面分析系统展开深入合作 充分发挥双方在航空航天和智能检测领域优势 共同推动航空航天发动机零部件自动化3D检测进程 南京航空航天大学创建于1952年10月 是新中国自己创办的第一批航空高等院校
  • 【python】python求解矩阵的转置(详细讲解)

    博 主 米码收割机 技 能 C Python语言 公众号 测试开发自动化 获取源码 商业合作 荣 誉 阿里云博客专家博主 51CTO技术博主 专 注 专注主流机器人 人工智能等相关领域的开发 测试技术 python求解矩阵的转置 详细讲解
  • pytorch:交换tensor的维度

    在pytorch中 tensor有两个成员函数可以实现维度交换 分别时transpose 和permute transpose 该函数可以交换tensor的任意两个维度 但是该函数一次只有两个参数 即一次只能交换两个维度 import to
  • Solr 检索结果集List<SolrDocument> 转换为指定业务对象总结

    前提说明 从solr结果集中取数据 取到了结果集 但是结果集是一个map 而我想要得到的是一个对象 怎么处理呢 我总计如下三种方法 第一种 solrDocument中提供了一个获取每个field对应值的方法 使用此方法获取所有的field对
  • SWOT、PDCA、SMART……这些对你绝对有用!

    企业的成功一定是有办法的有技巧的 君子性非异也 善假于物也 SWOT分析法帮助企业从四个维度进行综合分析 正确识别自己在市场中所处的地位 扬长避短 聚焦优势资源 在500强工作的员工 SWOT分析是必须具备的技能 特别是做市场的员工 全面的
  • [orin] nvidia orin 上安装 pytorch 和 torchvision 实操

    请看这个博主写的链接 写的非常好 目前我已经安装成功了 不同的是我是在Anaconda虚拟环境中安装的 原博客链接 https blog csdn net beautifulback article details 125717717 这次
  • TEASER-plusplus 安装

    https github com MIT SPARK TEASER plusplus 下载https codeload github com MIT SPARK TEASER plusplus zip v2 0 下载GoogleTest太慢
  • 测试开发概念篇

    目录 前言 几个常见的名词 需求 什么是BUG 测试用例 软件生命周期 开发模型 瀑布模型 螺旋模型 增量和迭代模型 敏捷模型 前言 什么是软件测试 软件测试就是验证产品特性是否满足用户需求 开发软件是为了盈利 必须满足用户才会盈利 测试和
  • LiunxQT开发篇—QT网络编程TCP实现(三)客户端代码

    需要包含三个头文件 include
  • 操作系统——第2章 操作系统用户界面

    目录 第2章 操作系统用户界面 基本概念 系统调用 基本概念 执行过程 第2章 操作系统用户界面 基本概念 一般将计算机系统的用户分为两类 使用和管理计算机应用程序的用户 包括普通用户与管理员用户 程序开发人员 操作系统为第一类用户提供命令
  • 日本半导体行业衰落的原因分析

    90年代初 半导体市场几乎是日本厂商的天下 在排名前十的半导体公司里曾经有6家是日本公司 日本半导体行业衰落的原因分析 那什么导致了今天日本半导体产业的衰落 来看看一些知名调查机构的分析 罪魁祸首1 高层管理人员的傲慢 我们谈过的许多行业观
  • hyperledger fabric Failed to generate orderer genesis block

    当使用configtxgen工具进行生成创世区块和channel tx等时出现错误 具体如下 Generating Orderer Genesis block
  • 解决:Echarts打包后出现白屏

    Echarts打包后出现白屏 原因 这是由于图表的容器节点被移除导致的 即使之后该节点被重新添加 图表所在的节点也已经不存在了 解决方法 利用钩子函数在页面销毁之前将其销毁即可 import onBeforeUnmount from vue
  • QT学习之经典控件源码(如此强大)

    进来好好学习了QT 研究了很多别人的源码 在绘图方面原来QT也是如此强大 源码下载 Files feiyangqingyun myValueControl zip FROM http www cnblogs com feiyangqingy
  • 自动化测试(四):pytest结合allure生成测试报告

    Allure 报告框架的名称 allure noun U 诱惑 魅力 吸引力 文章目录 1 allure下载 2 pytest框架使用allure 3 生成allure报告 1 allure下载 下载前需要先安装JDK 这里可以参考自动化测
  • 图的常用遍历——广度优先遍历和深度优先遍历

    目录 一 遍历图可能遇到的问题 二 图的常用遍历 三 深度优先遍历 DFS 四 广度优先遍历 BFS 一 遍历图可能遇到的问题 图的特点 图中可能存在回路 且图的任一顶点都可能与其它顶点相通 在访问完某个顶点之后可能会沿着某些边又回到了曾经