数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历

文章目录

  • 图的基本操作
    • 总览
    • 找边
    • 列出与某顶点相连的边
    • 插入顶点
    • 删除顶点
    • 增加边
    • 顶点的第一个邻接点
    • 顶点的下一个邻接点
    • 设置或者获取某条边的权值
    • 总览
  • 图的广度优先遍历
    • 总览
    • 树的广度优先遍历
    • 图的广度优先遍历
    • 树vs图
    • 图广度优先遍历的代码实现
    • 广度优先遍历序列
    • 遍历序列的可变性
    • 算法存在问题
    • 改进后的 复杂度分析
    • 广度优先生成树
    • 广度优先生成森林
    • 练习:有向图的BFS
    • 小结
  • 图的深度优先遍历
    • 总览
    • 树的深度优先遍历
    • 图的深度优先遍历
    • 算法存在的问题
    • 复杂度分析
    • 深度优先遍历序列
    • 深度优先生成树
    • 深度优先生成森林
    • 图的遍历与图的连通性
    • 小结

图的基本操作

总览

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第1张图片

找边

邻接矩阵直接找图中的某个元素是否为1即可
邻接表要遍历顶点的边链表
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第2张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第3张图片

列出与某顶点相连的边

邻接矩阵找行或列
邻接表找顶点对应的边链表
对于有向图的邻接表的入边时候需要将其他顶点的边链表都遍历
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第4张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第5张图片

插入顶点

此时插入的是与其他顶点都没有连接的顶点
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第6张图片

删除顶点

邻接矩阵设置 顶点中的一个变量为布尔型变量用来标记该顶点是否有效,当删除该节点时,只需将该节点所在行和列设置为0即可
邻接表即遍历所有边链表,将有顶点的边都删除,并修改对于的边链表
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第7张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第8张图片

增加边

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第9张图片

顶点的第一个邻接点

就是遍历到的第一个
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第10张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第11张图片

顶点的下一个邻接点

就是遍历到的第二个
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第12张图片

设置或者获取某条边的权值

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第13张图片

总览

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第14张图片

图的广度优先遍历

总览

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第15张图片

树的广度优先遍历

即找根节点的孩子节点先
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第16张图片

图的广度优先遍历

即先访问节点的相邻节点
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第17张图片

树vs图

图遍历可能访问到原先的节点,但树不会,因为它是一直访问孩子节点的
在这里插入图片描述

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第18张图片

图广度优先遍历的代码实现

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第19张图片
访问后入队,然后出队后再将其相邻且没有访问的节点访问,然后再入队,然后再出队再将其相邻且没有访问的节点访问,如此反复
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第20张图片

广度优先遍历序列

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第21张图片

遍历序列的可变性

不同邻接表对应的遍历序列可能不一样
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第22张图片

算法存在问题

非连通图无法遍历完所有节点
解决方法就是每个节点都广度优先遍历
下面是改进

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第23张图片

改进后的 复杂度分析

从结点树和边数考虑(从访问顶点和找各条边考虑)
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第24张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第25张图片

广度优先生成树

广度优先遍历过程生成的
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第26张图片

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第27张图片

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第28张图片

广度优先生成森林

即对各个连通分量广度优先遍历即可
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第29张图片

练习:有向图的BFS

有些点BFS不能遍历完所有的结点
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第30张图片

小结

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第31张图片

图的深度优先遍历

总览

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第32张图片

树的深度优先遍历

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第33张图片

图的深度优先遍历

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第34张图片

算法存在的问题

依然是所有顶点都深度优先遍历一次
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第35张图片

复杂度分析

即可能同时调用V次代码(或者说来自递归工作栈)
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第36张图片
即每个结点最终都会进入一次深度优先遍历函数,这样才可能最终深度优先遍历所有节点
只不过邻接矩阵中对应节点进入函数后时间复杂度为V
而邻接表为E
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第37张图片

深度优先遍历序列

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第38张图片
邻接表不一样,深度优先遍历序列可能不一样
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第39张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第40张图片

深度优先生成树

同样,即将遍历序列的其他边去了即可
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第41张图片

深度优先生成森林

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第42张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第43张图片

图的遍历与图的连通性

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第44张图片
数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第45张图片

小结

数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历_第46张图片

你可能感兴趣的:(王道数据结构和算法考研笔记,算法,数据结构,宽度优先)