数据结构(C语言版)第7章图.ppt
《数据结构(C语言版)第7章图.ppt》由会员分享,可在线阅读,更多相关《数据结构(C语言版)第7章图.ppt(81页珍藏版)》请在三一办公上搜索。
1、图,1、图的基本概念;2、图的存储结构(邻接矩阵、邻接表及有向图十字邻接表);3、图的遍历(深度优先搜索、广度优先搜索);4、最小生成树(kruskul算法、prim算法);5、最短路径(dijkstra算法、floyd算法);6、AOV网络与拓扑排序;7、AOE网络与关键路径。,教学内容,图的特点,顶点的前驱和后继个数无限制,图的应用,顶点之间的关系是任意的,图中任意两个顶点之间都可能相关,图(Graph)是一种非线性结构。,计算机科学,多对多,7.1 图的定义和术语,定义:,图是一种:数据元素间存在多对多关系的数据结构 加上一组基本操作构成的抽象数据类型。,ADT Graph 数据对象:V
2、 是具有相同特性的数据元素的集合,称为顶点集。数据关系:R=VR VR=|v,wV 且 P(v,w),表示从 v 到 w 的弧,谓词 P(v,w)定义了弧 的意义或信息 基本操作:,定义:,图(Graph)是一种复杂的非线性数据结构,由 顶点集合及顶点间的关系(也称弧或边)集合组成。可以表示为:G(V,VR)其中 V 是顶点的有穷非空集合;VR 是顶点之间关系 的有穷集合,也叫做弧或边集合。弧是顶点的有序对,边是顶点的无序对。,基本操作:,结构初始化CreateGraph(初始条件:V 是图的顶点集,VR 是图中弧的集合。操作结果:按 V 和 VR 的定义构造图 G。,销毁结构DestroyG
3、raph(初始条件:图 G 存在。操作结果:销毁图 G。,引用型操作LocateVex(G,u);初始条件:图 G 存在,u 和 G 中顶点有相同特征。操作结果:若 G 中存在和 u 相同的顶点,则返回该顶点在图 中位置;否则返回其它信息。,GetVex(G,v);初始条件:图 G 存在,v 是 G 中某个顶点。操作结果:返回 v 的值。,FirstAdjVex(G,v);初始条件:图 G 存在,v 是 G 中某个顶点。操作结果:返回 v 的第一个邻接点。若该顶点在 G 中没有邻 接点,则返回“空”。,顶点在图中的“位置”指 的是,在图的存储结构中顶 点之间自然形成的相对位置。,若G,则 称
4、w 为 v 的邻接点,若(v,w)G,则称 w 和 v 互为邻接点。,NextAdjVex(G,v,w);初始条件:图 G 存在,v 是 G 中某个顶点,w 是 v 的邻接顶点。操作结果:返回 v 的(相对于 w 的)下一个邻接点。若 w 是 v 的最后一个邻接点,则返回“空”。,若 v 有多个邻接 点,则在图的存储结 构建立之后,其邻接 点之间的相对次序也 就自然形成了。,加工型操作PutVex(初始条件:图 G 存在,v 是 G 中某个顶点。操作结果:对 v 赋值 value。,InsertVex(初始条件:图 G 存在,v 和图中顶点有相同特征。操作结果:在图 G 中增添新顶点 v。,D
5、eleteVex(初始条件:图 G 存在,v 是 G 中某个顶点。操作结果:删除 G 中顶点 v 及其相关的弧。,InsertArc(初始条件:图 G 存在,v 和 w 是 G 中两个顶点。操作结果:在 G 中增添弧,若 G 是无向的,则还增添 对称弧。,DeleteArc(初始条件:图 G 存在,v 和 w 是 G 中两个顶点。操作结果:在 G 中删除弧,若 G 是无向的,则还删除 对称弧。,DFSTraverse(G,Visit();初始条件:图 G 存在,Visit 是顶点的访问函数。操作结果:对图 G 进行深度优先遍历。遍历过程中对每个顶 点调用函数 Visit 一次且仅一次。一旦 v
6、isit()失败,则操作失败。,BFSTraverse(G,Visit();初始条件:图 G 存在,Visit 是顶点的访问函数。操作结果:对图 G 进行广度优先遍历。遍历过程中对每个顶 点调用函数 Visit 一次且仅一次。一旦 visit()失败,则操作失败。ADT Graph,基本术语:,有向图,无向图,顶点:图中的数据元素。,弧:若 VR,则 表示从 v 到 w 的 一条弧,且称 v 为弧尾,称 w 为弧头,此时的图称 为有向图。,G1=(V1,A1)V1=v1,v2,v3,v4 A1=,边:若 VR 必有VR,则以无序 对(v,w)代表这两个有序对,表示 v 和 w 之间的一条 边,
7、此时的图称为无向图。,G2=(V2,E2)V2=v1,v2,v3,v4,v5 E2=(v1,v2),(v1,v4),(v2,v3),(v2,v5),(v3,v4),(v3,v5),例:两个城市 A 和 B,如果 A 和 B 之间的连线的涵义是表示两 个城市的距离,则 和 是相同的,用(A,B)表示。如果 A 和 B 之间的连线的涵义是表示两城市之间人口流动 的情况,则 和 是不同的。,无向图中边的取值范围:0en(n-1)/2。(用 n 表示图中顶点数目,用 e 表示边的数目。且不 考虑顶点到其自身的边。),完全图:有 n(n-1)/2 条边的无向图(即:无向图 中每两个顶点之间都存在着一条边
8、)称为完全图。,有向完全图:有 n(n-1)条弧的有向图(即:有向 图中每两个顶点之间都存在着方向相反的两条弧)称 为有向完全图。,有向图中弧的取值范围:0en(n-1)。(用 n 表示图中顶点数目,用 e 表示弧的数目。且不 考虑顶点到其自身的弧。),稀疏图:含有很少条边或弧的图。,稠密图:含有很多条边或弧的接近完全图的图。,权:与图的边或弧相关的数,这些数可以表示从一个顶点到 另一个顶点的距离或耗费。,网:带权的图。,子图:如果图 G=(V,E)和 G=(V,E),满足:V V 且 E E,则称 G为G 的子图。,邻接点:若(v,v)是一条边,则称顶点 v 和 v互为邻接点,或称 v 和
9、v相邻接;称边(v,v)依附于顶点 v 和 v,或称(v,v)与顶点 v 和 v 相关联。,若 是一条弧,则称顶点 v 邻接到 v,顶点 v 邻接自 顶点 v。并称弧 与顶点 v 和 v 相关联。,度:无向图中顶点 v 的度是和 v 相关联的边的数目,记为:TD(v)。,入度:有向图中以顶点 v 为头的弧的数目称为 v 的入度,记 为:ID(v)。,出度:有向图中以顶点 v 为尾的弧的数目称为 v 的出度,记 为:OD(v)。,度:入度和出度之和,即:TD(v)=ID(v)+OD(v)。,如果顶点 vi 的度为 TD(vi),则一个有 n 个顶点 e 条边(弧)的图,满足如下关系:,路径:从顶
10、点 v 到 v 的路径是一个顶点序列(v=vi,0,vi,1,vi,m=v),满足(vi,j-1,vi,j)VR 或 VR,(1 j m)。,对于有向图,路径也是有向的。,路径长度:路径上边或弧的数目。,回路(环):第一个顶点和最后一个顶点相同的路径。,简单路径:序列中顶点(两端点除外)不重复出现的路径。,简单回路(简单环):前后两端点相同的简单路径。,连通:从顶点 v 到 v 有路径,则说 v 和 v 是连通的。,连通图:图中任意两个顶点都是连通的。,非连通图:有 n 个顶点和小于 n-1 条边的图。,连通分量:无向图的极大连通子图(不存在包含它的更大的 连通子图);任何连通图的连通分量只有
11、一个,即其本身;非连 通图有多个连通分量(非连通图的每一个连通部分)。,强连通图:任意两个顶点都连通的有向图。,强连通分量:有向图的极大强连通子图;任何强连通图的强 连通分量只有一个,即其本身;非强连通图有多个强连通分量。,生成树:所有顶点均由边连接在一起,但不存在回路的图。,一个图可以有许多棵不同的生成树。,注,所有生成树具有以下共同特点:生成树的顶点个数与图的顶点个数相同;生成树是图的极小连通子图;一个有 n 个顶点的连通图的生成树有 n-1 条边;生成树中任意两个顶点间的路径是唯一的;在生成树中再加一条边必然形成回路。,含 n 个顶点 n-1 条边的图不一定是生成树。,生成森林:对于非连
12、通图,其每个连通分量可以构造一棵生 成树,合成起来就是一个生成森林。,有向树:如果一个有向图恰有一个顶点的入度为 0,其余顶 点的入度均为 1,则是一棵有向树。,有向图的生成森林:由若干棵有向树组成,含有图中全部顶 点,但只有足以构成若干棵不相交的有向树的弧。,7.2 图的存储结构,多重链表,7.2.1 数组表示法(邻接矩阵表示法),对于一个具有 n 个顶点的图,可用两个数组存储。其中一个 一维数组存储数据元素(顶点)的信息,另一个二维数组(图的 邻接矩阵)存储数据元素之间的关系(边或弧)的信息。,邻接矩阵:设 G=(V,VR)是具有 n 个顶点的图,顶点的顺 序依次为 v1,v2,vn,则
13、G 的邻接矩阵是具有如下性质的 n 阶 方阵:,v1 v2 v3 v4,v1 v2 v3 v4 v5,v1 v2 v3 v4,v1 v2 v3 v4 v5,特点:,无向图的邻接矩阵对称,可压缩存储;有 n 个顶点的无向图需 存储空间为 n(n-1)/2。,有向图邻接矩阵不一定对称;有 n 个顶点的有向图需存储空间 为 n,空间复杂度为 O(n2),用于稀疏图时空间浪费严重。,无向图中顶点 vi 的度 TD(vi)是邻接矩阵中第 i 行 1 的个数。,有向图中,顶点 vi 的出度是邻接矩阵中第 i 行 1 的个数。,顶点 vi 的入度是邻接矩阵中第 i 列 1 的个数。,网的邻接矩阵可定义为:,
14、v1 v2 v3 v4 v5 v6,v1 v2 v3 v4 v5 v6,图的数组(邻接矩阵)存储表示:,#define INFINITY INT_MAX/最大值#define MAX_VERTEX_NUM 20/最大顶点个数 typedef enum DG,DN,AG,AN GraphKind;/有向图,有向网,无向图,无向网 typedef struct ArcCell VRType adj;/VRType是顶点关系类型。对无权图,用 1 或 0 表示相邻否;/对带权图,则为权值类型。InfoType*info;/该弧相关信息的指针 ArcCell,AdjMatrixMAX_VERTEX_N
15、UMMAX_VERTEX_NUM;typedef struct VertexType vexsMAX_VERTEX_NUM;/顶点向量 AdjMatrix arcs;/邻接矩阵 int vexnum,arcnum;/图的当前顶点数和弧(边)数 GraphKind kind;/图的种类标志 MGraph;,7.2.2 邻接表(类似于树的孩子链表表示法),头结点,表结点,3,1,4,2,0,4,3,1,2,0,2,1,特点:,若无向图中有 n 个顶点、e 条边,则其邻接表需 n 个头结点和 2e 个表结点。适宜存储稀疏图。,无向图中顶点 vi 的度为第 i 个单链表中的结点数。,0,1,2,3,2
16、,1,3,0,v1,v3,v4,v2,邻接表,逆邻接表,顶点 vi 的出度为第 i 个单链 表中的结点个数。,特点:,顶点 vi 的入度为整个单链表 中邻接点域值是 i-1 的结点 个数。,找出度易,找入度难。,找入度易,找出度难。,顶点 vi 的入度为第 i 个单链 表中的结点个数。,顶点 vi 的出度为整个单链表 中邻接点域值是 i-1 的结点 个数。,图的邻接表存储表示:,#define MAX_VERTEX_NUM 20 typedef struct ArcNode int adjvex;/该弧所指向的顶点的位置 struct ArcNode*nextarc;/指向下一条弧的指针 In
17、foType*info;/该弧相关信息的指针 ArcNode;typedef struct VNode VertexType data;/顶点信息 ArcNode*firstarc;/指向第一条依附该顶点的弧 VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices;int vexnum,arcnum;/图的当前顶点数和弧数 int kind;/图的种类标志 ALGraph;,弧结点,7.2.3 十字链表,顶点结点,#define MAX_VERTEX_NUM 20 typedef struct ArcBox int tailvex
18、,headvex;/该弧的尾和头顶点的位置 struct ArcBox*hlink,*tlink;/分别指向下一个弧头相同和弧尾相同的弧的指针域 InfoType*info;/该弧相关信息的指针 ArcBox;typedef struct VexNode VertexType data;ArcBox*firstin,*firstout;/分别指向该顶点第一条入弧和出弧 VexNode;typedef struct VexNode xlistMAX_VERTEX_NUM;/表头向量 int vexnum,arcnum;/有向图的当前顶点数和弧数 OLGraph;,有向图的十字链表存储表示:,7.
19、2.3 邻接多重表(无向图的另一种链式存储结构),邻接表优点:容易求得顶点和边的信息。缺点:某些操作不方便(如:删除一条边需找表示此 边的两个结点)。,邻接多重表:每条边用一个结点表示。其结点结构如下:,标志域 标记此边是 否被搜索过,标志域 标记此边是 否被搜索过,存与顶点有关的信息,指向第一条依附于该顶点的边,#define MAX_VERTEX_NUM 20 typedef emnu unvisited,visited VisitIf;typedef struct Ebox VisitIf mark;/访问标记 int ivex,jvex;/该边依附的两个顶点的位置 struct EBo
20、x*ilink,*jlink;/分别指向依附这两个顶点的下一条边 InfoType*info;/该边信息指针 EBox;typedef struct VexBox VertexType data;EBox*firstedge;/指向第一条依附该顶点的边 VexBox;typedef struct VexBox adjmulistMAX_VERTEX_NUM;int vexnum,edgenum;/无向图的当前顶点数和边数 AMLGraph;,无向图的邻接多重表存储表示:,7.3 图的遍历,从图的任意指定顶点出发,依照某种规则去访问图中所有顶 点,且每个顶点仅被访问一次,这一过程叫做图的遍历。,
21、图的遍历按照深度优先和广度优先规则去实施,通常有深度 优先遍历法(Depth_First SearchDFS)和 广度优先遍历法(Breadth_Frist SearchBFS)两种。,7.3.1 深度优先遍历(DFS),方法:1、访问指定的起始顶点;2、若当前访问的顶点的邻接顶点有未被访问的,则任选 一个访问之;反之,退回到最近访问过的顶点;直到 与起始顶点相通的全部顶点都访问完毕;3、若此时图中尚有顶点未被访问,则再选其中一个顶点 作为起始顶点并访问之,转 2;反之,遍历结束。,例:,V1,顶点访问次序:,V2,V4,V8,V5,V3,V6,V7,V1,V2,V5,V8,V4,V3,V6,
22、V7,V1,V2,V4,V8,V5,V3,V7,V6,V1,V2,V5,V8,V4,V3,V7,V6,V1,V3,V6,V7,V2,V4,V8,V5,连通图的深度优先遍历类似于树的先根遍历,a,b,c,h,d,e,k,f,g,a,c,h,d,f,k,e,b,g,顶点访问次序:,例:,a,c,h,d,f,k,e,g,b,a,c,h,f,k,e,d,b,g,解决办法:为每个顶点设立一个“访问标志”。,如何判别V的邻接点是否被访问?,首先将图中每个顶点的访问标志设为 FALSE,之后搜索图 中每个顶点,如果未被访问,则以该顶点为起始点,进行深度 优先遍历,否则继续检查下一顶点。,1,3,7,4,0,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版 章图
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6296798.html