0
点赞
收藏
分享

微信扫一扫

【复习笔记】数据结构之图


文章目录

  • ​​一、顶点的度​​
  • ​​二、顶点—顶点关系的描述​​
  • ​​三、连通图与强连通图​​
  • ​​四、子图​​
  • ​​五、连通分量​​
  • ​​六、生成树​​
  • ​​七、几种特殊形态的图​​
  • ​​八、图的存储​​
  • ​​1.邻接矩阵法​​
  • ​​邻接矩阵的性质​​
  • ​​2. 邻接表法​​
  • ​​3. 十字链表法​​
  • ​​九、图的遍历​​
  • ​​1. 广度优先遍历(BFS)​​
  • ​​广度优先生成树​​
  • ​​2. 深度优先遍历(DFS)​​
  • ​​深度优先生成树​​
  • ​​图的遍历与图的连通性​​
  • ​​十、最小生成树​​
  • ​​1. 相关概念​​
  • ​​2. Prim算法​​
  • ​​3. Kruskal算法​​
  • ​​算法对比​​
  • ​​十一、最短路径问题​​
  • ​​1.Dijkstra算法​​
  • ​​2. Floyd算法​​
  • ​​十二、有向无环图​​
  • ​​构造有向无环图步骤​​
一、顶点的度
  • 对于无向图,顶点的度 = 依附于该顶点的边的数量
  • 对于有向图,入度 = 出度 = 边的数量
二、顶点—顶点关系的描述

【复习笔记】数据结构之图_结点

三、连通图与强连通图

【复习笔记】数据结构之图_邻接矩阵_02

四、子图

【复习笔记】数据结构之图_结点_03

五、连通分量

【复习笔记】数据结构之图_生成树_04

六、生成树

个点,条边,边再多就形成回路

【复习笔记】数据结构之图_邻接矩阵_07

七、几种特殊形态的图

无向完全图、有向完全图

【复习笔记】数据结构之图_生成树_08


树、森林、有向树

【复习笔记】数据结构之图_生成树_09

八、图的存储
1.邻接矩阵法

【复习笔记】数据结构之图_结点_10


对于不带权无向图,求顶点的度时,只需要对某行或某列求和即可

对于不带权有向图,对行求和表示顶点的出度,对列求和表示顶点的入度

邻接矩阵的性质

【复习笔记】数据结构之图_结点_11

2. 邻接表法

【复习笔记】数据结构之图_生成树_12


【复习笔记】数据结构之图_邻接矩阵_13


邻接表和邻接矩阵的对比:

【复习笔记】数据结构之图_结点_14

3. 十字链表法

只能存储有向图,一个结构体表示一条边

【复习笔记】数据结构之图_生成树_15


【复习笔记】数据结构之图_生成树_16

九、图的遍历
1. 广度优先遍历(BFS)
  • 访问初始结点
  • 访问初始结点所有的相邻结点
  • 根据这些相邻的结点,再次挨个访问他们相邻的结点
  • 【复习笔记】数据结构之图_结点_17

为了能遍历到非连通图的所有结点,我们检查数组,找到没有遍历到的结点,从该结点开始调用

【复习笔记】数据结构之图_结点_20

广度优先生成树

根据遍历的顺序,构造生成树

【复习笔记】数据结构之图_生成树_21


邻接表中结点顺序不同,构造的生成树也不同。用邻接矩阵构造的生成树必唯一。

【复习笔记】数据结构之图_邻接矩阵_22

2. 深度优先遍历(DFS)

类似于树的先序遍历。

图的DFS: 遍历一个点,然后遍历与该点相邻的第一个点,接着再遍历与正在遍历结点第一个相邻的且未被访问的结点,如此下去,直到某个遍历的结点不存在没遍历的结点,然后返回上层。上层接着遍历相邻的第二个未被访问的结点

【复习笔记】数据结构之图_结点_23


同样地,为遍历到非连通图的所有结点,我们检查数组,找到没有遍历到的结点,从该结点开始调用

【复习笔记】数据结构之图_邻接矩阵_26


复杂度分析

【复习笔记】数据结构之图_结点_27


【复习笔记】数据结构之图_生成树_28

深度优先生成树

根据深度优先遍历的顺序,构造生成树

图的遍历与图的连通性

无向图

【复习笔记】数据结构之图_生成树_29


有向图

【复习笔记】数据结构之图_邻接矩阵_30

十、最小生成树
1. 相关概念

连通图的生成树: 包含图中全部顶点的一个极小连通子图,若图中含有个顶点和条边。对于生成树而言,减少一条边,则变得不连通。加上一条边,则形成回路。

【复习笔记】数据结构之图_生成树_33

2. Prim算法

从某个顶点开始构建生成树,每次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止。同一个图构建的 最小生成树不唯一

【复习笔记】数据结构之图_邻接矩阵_34

3. Kruskal算法

每次选择一条权值最小的边,使这条边的两头连通(原本已经连通就不选),直到所有结点都连通。

【复习笔记】数据结构之图_结点_35

算法对比

【复习笔记】数据结构之图_结点_36

十一、最短路径问题
1.Dijkstra算法

初始化工作:将源点放入集合,修改布尔型数组。对于与源点相邻的结点,更新数组。对于不相邻的结点,值为无穷

每次在集合中加入个点,每次找到不在集合中且距离源点最近的点加入到。加入后更新不在集合中的点与源点的距离,即数组与数组。

​​参考代码​​

注: Dijkstra不能解决带负权值的图

2. Floyd算法

【复习笔记】数据结构之图_结点_48


注: Floyd不能解决带负权值的图

【复习笔记】数据结构之图_生成树_49

十二、有向无环图

【复习笔记】数据结构之图_生成树_50

答案选A:

【复习笔记】数据结构之图_邻接矩阵_51

构造有向无环图步骤

【复习笔记】数据结构之图_生成树_52


三个加号的操作数相同,合并3个加号:

【复习笔记】数据结构之图_邻接矩阵_53


右侧两个乘号的操作数相同,合并2个乘号:

【复习笔记】数据结构之图_结点_54

注: 不同层的运算符不可能合并


举报

相关推荐

0 条评论