• (十六)数据结构-图的遍历


    图的遍历是指的从图中的某一顶点出发,按照某种搜索方法沿着图中的边对图中所有顶点访问一次且仅访问一次

    一、广度优先搜索

    1.1树和图遍历的区别

    可以看到树设置了一个辅助队列,那么图也可以设置一个辅助队列
    在这里插入图片描述

    1.2实现思路在这里插入图片描述

    1.3实现原理

    以下面例子为例:

    1. 从1出发进行广度优先遍历,那么我们首先访问的是1结点
    2. 与1最近的是2、5
    3. 在从2、5出发下一步访问的是6
    4. 接下来从6出发可以访问的是3、7
    5. 再从3出发可以访问的是4
    6. 从7出发可以访问的是8
    7. 所以从顶点1得到的广度优先遍历序列是:1、2、5、6、7、4、8

    通过邻接矩阵存储的话,我们是按照递增进行遍历的,那么我们的表示方式是唯一的
    但是如果是邻接表的话,是可变的,不唯一的
    在这里插入图片描述

    1.4BFS算法

    结论:对于无向图,调用BFS函数的次数=连通分量数(极大连通子图)(下面的例子是2)

    1. 那么如果是非连通图,我们是无法遍历所有结点的
    2. 那么我们就应该先初始化visited数组,将其全部设置为false
    3. 接着找到第一个为false的元素,其实就是找到还没有被访问过的顶点
    4. 那么我们在进行调用BFS算法
    5. 从1号结点出发,我们是可以访问完1-8个结点的,访问完后我们的visited[1]-visited[8]都会变成true
    6. 那么我们遍历完第一个连通图的时候,再查看visited数组看看是否还有标志为false的数组,如果有的话,我们再来遍历
    7. 那么在此调用for循环,依次往后找,找到false的顶点
    8. 再调用BFS算法
    9. 即可遍历完成

    在这里插入图片描述

    1.5算法效率

    注意:此处的时间复杂度并不是通过看for循环,因为图可能是没有边相连,并且使用邻接表来存储的话,那么通过看for循环,显然是0次
    对于BFS的时间复杂度:访问结点的时间+访问所有边的时间

    在这里插入图片描述

    1.6 广度优先生成树

    广度优先生成树是通过广度优先遍历得来的
    当我们在进行演示的时候,标红的边,当某个顶点第一次被访问的时候,是从哪个顶点过去的
    eg.4号顶点是通过3号顶点进行访问的,而不是通过7来进行访问的
    那么用这样的访问我们可以得到,如果有n个顶点,那么就会标红了n-1条边,那么我们把其余的边去掉,那么就是一颗广度优先生成树

    在这里插入图片描述

    在这里插入图片描述

    1.7广度优先生成森林

    1.1可以得到一个广度优先生成树
    1.2也可以得到一个广度优先生成树
    那么将两棵树放在一起就可以得到一个广度优先生成森林
    在这里插入图片描述

    1.8图的BFS回顾

    在这里插入图片描述

    二、深度优先遍历

    以下面例子为例:
    从2号结点出发,通过邻接表可以看到与2相邻的是6
    接下来在从6开始访问,与6相邻的是2,但是2已经被访问过了,但是7没有被访问过,因此我们访问7
    接下来在从7开始访问,与7相邻的是6,但是6被访问过了,接下来访问8
    接下来在从8开始访问,与8相邻的是4,4没有被访问过,接下来访问4

    接下来我们得到遍历序列尾2、6、7、8、4、3
    当我们访问3的时候,我们发现6、7、4都被访问过了
    那么我们返回上一层,也就是4,从4出发,可以发现3、8、7也都被访问过了


    返回到2的时候,我们发现与2相邻的还有1没有被访问过,那么我们就访问1号结点
    此时我们得到遍历序列尾2、6、7、8、4、3、1
    当我们访问1的时候,我们发现还有5没有被访问过
    那么我们得到的遍历序列为2、6、7、8、4、3、1、5
    在这里插入图片描述

    1.2深度优先生成树

    与广度优先类似

    1.2深度优先生成森林

    与广度优先类似

    在这里插入图片描述
    在这里插入图片描述

    1.4知识点回顾

    在这里插入图片描述

  • 相关阅读:
    【ArcGIS微课1000例】0030:ArcGIS利用MXD doctor工具分析并修复mxd地图文档
    芯片产业管理和营销指北(3)—— 赢得客户
    1018 锤子剪刀布
    【Linux】【网络】传输层协议:TCP
    loggie 编码以及换行符测试
    Ubuntu系统磁盘分区与挂载
    操作系统实验三:死锁避免程序设计
    【Web前端】HTML详解(上篇)
    CSS笔记——触发式动画Transition、主动式动画Animation、Transfrom 动画、CSS 3D 动画、阴影和滤镜样式
    实力认证!Coremail连续9次入围安全牛《中国网络安全行业全景图》
  • 原文地址:https://blog.csdn.net/weixin_45579930/article/details/126265822