数据结构——图

本文详细介绍了图数据结构的基本概念,包括有向图与无向图、简单图与多重图的区分,以及顶点的度、连通性等重要概念。同时,探讨了图的四种存储结构:邻接矩阵、邻接表、十字链表和邻接多重表。文章还涵盖了图的遍历算法,如广度优先遍历(BFS)和深度优先遍历(DFS),并讨论了最小生成树(Prim和Kruskal算法)以及最短路径问题(BFS、Dijkstra和Floyd算法)。
摘要由CSDN通过智能技术生成

目录

1.图的基本概念

1.1定义与术语

1.1.1定义

1.1.2有向图 VS 无向图

1.1.3简单图 VS 多重图

1.1.4顶点的度、入度、出度

​1.1.5顶点间的关系描述

​1.1.6连通图 VS 强连通图

1.1.7子图

1.1.8连通分量和强连通分量

1.1.9生成树和生成森林

1.1.10边的权、带权图/网

1.2几种特殊的图

2.图的四种存储结构

2.1邻接矩阵法(顺序存储)

2.1.1方法实现MatrixGraph

2.1.2邻接矩阵的性质

2.2邻接表法(顺序+链式存储)AdjacentList

2.3十字链表(存有向图)

2.4邻接多重表(存无向图)

3.图的基本操作(基于邻接矩阵和邻接表)

4.图的广度优先遍历(BFS)

4.1与树的广度优先遍历之间的联系

4.2算法实现

4.3复杂度分析

4.4广度优先生成树

5.图的深度优先遍历(DFS) 

5.1与树的深度优先遍历之间的联系

5.2算法实现

5.3复杂度分析

5.4深度优先生成树

5.5图的遍历和图的连通性

6.最小生成树

6.1概念

6.2 Prim 算法(普里姆)

6.3 Kruskal算法(克鲁斯卡尔)

7.最短路径问题

7.1 BFS算法(无权图/权为1)

7.2 Dijkstra算法(带权图、无权图)

7.3Floyd算法(带权图、无权图)

8.有向无环图(DAG)描述表达式

9.拓扑排序

10.关键路径​​​​​​​

1.图的基本概念

1.1定义与术语

1.1.1定义

图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V=\left \{ v_{1},v_{2},... , v_{n} \right \},则用 |V| 表示图G中顶点的个数,也称图G的阶,E=\left \{ \left ( u,v \right ) | u\in V,v\in V \right \},用 |E| 表示图G中边的条数。

G:Graph;V:Vertex;E:Edge

注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集

 

1.1.2有向图 VS 无向图

1.1.3简单图 VS 多重图

1.1.4顶点的度、入度、出度

无向图:每条边为顶点贡献两个度。故顶点的度为 2|E|

有向图:每条弧(A->B)为顶点B贡献一个入度和为顶点A贡献一个出度,故所有顶点的入度之和=出度之和= |E|

1.1.5顶点间的关系描述

1.1.6连通图 VS 强连通图

连通图:无向图;求非连通图最多几条边——孤立其中一个顶点,其他n-1个顶点两两连接

强连通图:有向图

1.1.7子图

生成子图:包含原图的所有结点

无向图中的子图:

有向图中的子图:

1.1.8连通分量和强连通分量

连通分量是无向图的子图,连通且极大。

无向图的连通分量:

有向图的强连通分量:

1.1.9生成树和生成森林

连通图的生成树(无向的):尽可能包含更少的边(极小);不唯一

哪种生成树是最优的?——最优带权路径

生成森林:

非连通图->若干个连通分量->对应的生成树->生成森林

1.1.10边的权、带权图/网

1.2几种特殊的图

完全图:最多的边

稀疏图 VS 稠密图

有向树入度为0的顶点视为根

2.图的四种存储结构

2.1邻接矩阵法(顺序存储)

2.1.1方法实现MatrixGraph

存储不带权图:

#define MaxVertexNum 100 //顶点数目最大值
typedef char VertexType; 
typedef int EdgeType;//或bool 
typedef struct{
	VertexType Vex[MaxVertexNum];//顶点表 
	EdgeType Edge[MaxVertexNum][MaxVertexNum];//边/弧表(邻接矩阵) 
	int vexnum,acrnum; //当前顶点数,边/弧数 
}MGraph; 

顶点表可以根据实际情况用其他数据类型以表示更复杂的信息
邻接矩阵用bool(1B) 存储0、1更节省空间

无向图:求顶点的度——遍历单行或单列
有向图:
求顶点的入度——遍历单列
求顶点的出度——遍历单行
求顶点的度——遍历单行和单列 

存储带权图:

自己到自己的权设为0或无穷都可 

性能分析:

缺点:数组实现的顺序存储,空间复杂度高,不适合存储稀疏图。 

2.1.2邻接矩阵的性质

证明见离散数学图论

邻接矩阵法要点回顾:

如何计算指定顶点的度、入度、出度(分无向图、有向图来考虑)?时间复杂度如何?

如何找到与顶点相邻的边(入边、出边)?时间复杂度如何?

如何存储带权图?

空间复杂度―—O(\left | V \right |^{2}),适合存储稠密图

无向图的邻接矩阵为对称矩阵,如何压缩存储?

设图G的邻接矩阵为A(矩阵元素为0/1),则A^{n}的元素

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值