数据结构之图的存储结构与遍历(-116张)课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构之图的存储结构与遍历(-116张)课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 存储 结构 遍历 116 课件
- 资源描述:
-
1、NoImage第第7章章 图图7.1 图的定义与基本术语图的定义与基本术语 7.2 图的存储结构图的存储结构 7.3 图的遍历图的遍历 7.4 图的连通性问题图的连通性问题 7.5 有向无环图的应用有向无环图的应用 7.6 最短路径最短路径返回主目录NoImage 图结构与表结构和树结构的不同表现在结点之图结构与表结构和树结构的不同表现在结点之间的关系上,线性表中结点之间的关系是一对一的;间的关系上,线性表中结点之间的关系是一对一的;树是按分层关系组织的结构,树结构之间是一对多;树是按分层关系组织的结构,树结构之间是一对多;对于图结构,图中顶点之间的关系可以是多对多,对于图结构,图中顶点之间的
2、关系可以是多对多,即一顶点和其它顶点间的关系是任意的,可以有关即一顶点和其它顶点间的关系是任意的,可以有关也可以无关。因此,图也可以无关。因此,图 G 树树T L,图是一种比,图是一种比较复杂的非线性数据结构。较复杂的非线性数据结构。图作为一种非线性结构,被广泛应用于多个技术图作为一种非线性结构,被广泛应用于多个技术领域。在本章中,主要是应用图论的理论知识来讨论领域。在本章中,主要是应用图论的理论知识来讨论如何在计算机上表示和处理图,以及如何利用图来解如何在计算机上表示和处理图,以及如何利用图来解决一些实际问题。决一些实际问题。返回主目录NoImage7.1 图的定义与基本术语图的定义与基本术
3、语7.1.1 图的定义图的定义 图(图(Graph)是一种网状数据结构,其形式化)是一种网状数据结构,其形式化定义如下:定义如下:Graph=(V,R)V=xxDataObjectxDataObject R=VR VR=xPyP(x x,y y)(x x,yVyV)返回主目录NoImage DataObject DataObject为一个集合,该集合中的为一个集合,该集合中的所有元素所有元素具有具有相同的特性相同的特性。V中的数据元素通常称为中的数据元素通常称为顶点顶点(vertex),),VR是两个顶点之间的关系的集合。是两个顶点之间的关系的集合。P P(x x,y y)表示)表示x x和和
4、y y之间有特定的关联属性之间有特定的关联属性P P。弧:弧:若若VR,则,则表示从顶点表示从顶点x到顶点到顶点y的的一条弧一条弧(arc),并称),并称x为为弧尾弧尾(tail)或)或起始点起始点,称称y为为弧头弧头(head)或)或终端点终端点。有向图:有向图:若图中的边是有方向的,称这样的图为若图中的边是有方向的,称这样的图为有有向图向图。返回主目录NoImage无向图无向图:若若VR,必有,必有VR,即,即VR是对称关系,这时以无序对(是对称关系,这时以无序对(x,y)来代替两)来代替两个有序对,表示个有序对,表示x和和y之间的一条边(之间的一条边(edge),此),此时的图称为时的图
5、称为无向图无向图。例如:下图例如:下图G1是有向图,是有向图,G2是无向图是无向图2134G12145G23返回主目录NoImage 在图中,我们可以将任一顶点看成是图的第一在图中,我们可以将任一顶点看成是图的第一个顶点,同理,对于任一顶点而言,它的邻接点之个顶点,同理,对于任一顶点而言,它的邻接点之间也不存在顺序关系。为了操作的方便,我们需要间也不存在顺序关系。为了操作的方便,我们需要将图中的顶点按任意序列排列起来。将图中的顶点按任意序列排列起来。顶点顶点在这个在这个人人为的随意排列中的位置序号称为为的随意排列中的位置序号称为顶点在图中的位置。顶点在图中的位置。图的基本操作和其它数据结构一样
6、,也有创图的基本操作和其它数据结构一样,也有创建、插入、删除、查找等。建、插入、删除、查找等。返回主目录NoImage图的抽象类型定义:图的抽象类型定义:ADT Graph 数据对象数据对象V:一个集合,该集合中的所有元素具有相:一个集合,该集合中的所有元素具有相同的特性。同的特性。数据关系数据关系R:R=VR VR=P(x,y)(x,yV)返回主目录NoImage基本操作基本操作:(1)GreateGraph(G):创建图:创建图G。(2)DestoryGraph(G):销毁图:销毁图G。(3)LocateVertex(G,v):确定顶点确定顶点v v在图在图G G中的位置。中的位置。若图若
7、图G G中没有顶点中没有顶点v v,则函数值为,则函数值为“空空”。(4 4)GetVertex(G,I)GetVertex(G,I):取出图:取出图G G中的第中的第i i个顶点的个顶点的值。值。若若ii图图G G中顶点数,则函数值为中顶点数,则函数值为“空空”。返回主目录NoImage(5)FirstAdjVertex(G,v)FirstAdjVertex(G,v):求图:求图G G中顶点中顶点v v的第一的第一个邻接点。若个邻接点。若v v无邻接点或图无邻接点或图G G中无顶点中无顶点v v,则函数值,则函数值为为“空空”。(6)NextAdjVertex(G,v,w)NextAdjVe
8、rtex(G,v,w):已知:已知w w是图是图G G中顶点中顶点v v的某个邻接点,求顶点的某个邻接点,求顶点v v的下一个邻接点(紧跟在的下一个邻接点(紧跟在w w后面)。若后面)。若w w是是v v的最后一个邻接点,则函数值为的最后一个邻接点,则函数值为“空空”。(7)InsertVertex(G,u)InsertVertex(G,u):在图:在图G G中增加一个顶点中增加一个顶点u u。返回主目录NoImage(8)DeleteVertexDeleteVertex(G G,v v):删除图):删除图G G的顶点的顶点v v及及与与顶点顶点v v相关联的弧。相关联的弧。(9)Insert
9、ArcInsertArc(G G,v v,w w):在图):在图G G中增加一条从中增加一条从顶点顶点v v到顶点到顶点w w的弧。的弧。(10)DeleteArcDeleteArc(G G,v v,w w):删除图):删除图G G中从顶点中从顶点v v到顶点到顶点w w的弧。的弧。(11)TraverseGraphTraverseGraph(G):按照某种次序,对图):按照某种次序,对图G的每个结点访问一次且最多一次。的每个结点访问一次且最多一次。返回主目录NoImage7.1.2 基本术语基本术语 设用设用n表示图中顶点的个数,用表示图中顶点的个数,用 e表示图中边或表示图中边或弧的数目,
10、并且不考虑图中每个顶点到其自身的边弧的数目,并且不考虑图中每个顶点到其自身的边或弧。或弧。无向完全图无向完全图:有有n(n-1)/2条边(图中每个顶点和条边(图中每个顶点和其余其余n-1个顶点个顶点都有边相连都有边相连)的无向图为无向完全)的无向图为无向完全图图。有向完全图有向完全图:有有n(n-1)条边(图中每个顶点和其)条边(图中每个顶点和其余余n-1个顶点个顶点都有弧相连都有弧相连)的有向图为有向完全图)的有向图为有向完全图。返回主目录NoImage稀疏图稀疏图:对于有很少条边的图(对于有很少条边的图(e n log n)称为)称为稀疏图稀疏图,反之称为反之称为稠密图稠密图。子图子图:设
11、有两个图设有两个图G=(V,E)和图)和图G/=(V/,E/),若若V/V且且E/E,则称图则称图G/为为G的子图。的子图。图图G1和图和图G2的子图见的子图见p155的图的图7.2所示。所示。返回主目录NoImage 对于对于无向图无向图 G=(V,E),如果边(),如果边(v,v/)E,则称顶点,则称顶点v,v/互为邻接点,即互为邻接点,即v,v/相邻接。相邻接。边(边(v,v/)依附于顶点)依附于顶点v和和v/,或者说边(,或者说边(v,v/)与顶点与顶点v和和v/相关联。相关联。对于对于有向图有向图G=(V,A)而言,若弧)而言,若弧A,则称顶点,则称顶点v邻接到顶点邻接到顶点v/,顶
12、点,顶点v/邻接自顶邻接自顶点点v,或者说弧,或者说弧与顶点与顶点v,v/相关联。相关联。邻接点邻接点:返回主目录NoImage度、入度和出度度、入度和出度 对于对于无向图而言,无向图而言,顶点顶点v 的度的度是是指和指和v相关联的边的相关联的边的数目数目,记作,记作TD(v)。对于有向图而言,对于有向图而言,顶点顶点v的度有的度有出度出度和和入度入度两部分:两部分:以以顶点顶点v为弧头的弧的数目为弧头的弧的数目称为该顶点的称为该顶点的入度入度,记,记作作ID(v),以,以顶点顶点v为弧尾的弧的数目为弧尾的弧的数目称为该顶点称为该顶点的的出度出度,记作,记作OD(v)则顶点则顶点v的度为:的度
13、为:TD(v)=ID(v)+OD(v)。)。返回主目录NoImage 一般地,若图一般地,若图G中有中有n个顶点,个顶点,e条边或弧,则条边或弧,则图中顶点的度与边的关系如下:图中顶点的度与边的关系如下:e=TD(Vi)2ni=1返回主目录NoImage权与网权与网:在实际应用中,有时图的在实际应用中,有时图的边或弧上边或弧上往往与具有往往与具有一定意义的数有关一定意义的数有关,即,即每一条边都有与它相关的数,每一条边都有与它相关的数,称为称为权权,这些权可以表示从一个顶点到另一个顶点,这些权可以表示从一个顶点到另一个顶点的距离或耗费等信息。我们将的距离或耗费等信息。我们将这种带权的图这种带权
14、的图叫做叫做赋赋权图或网权图或网。图例见图例见p156的图的图7.3所示。所示。返回主目录NoImage路径与回路路径与回路无向图无向图G=G=(V V,EE)中从)中从顶点顶点v v到到v v/的的路径路径是一个顶是一个顶点序列点序列v vi 0i 0,v vi1i1,v vi2i2,v vinin,其中(,其中(v vij-1ij-1,v vijij)EE,1jn1jn。如果图如果图G G是是有向图有向图,则,则路径路径也是也是有向有向的,顶点序列应的,顶点序列应满足满足vAA,1jn1jn。路径长度路径长度:指路径上经过的弧或边的数目。:指路径上经过的弧或边的数目。返回主目录NoImag
15、e回路或环回路或环:在一个路径中,若其第一个顶点和最后:在一个路径中,若其第一个顶点和最后一个顶点是相同的,即一个顶点是相同的,即v=vv=v/,则称该路径为一个,则称该路径为一个回路或环回路或环。简单路径:简单路径:若表示路径的顶点序列中的顶点若表示路径的顶点序列中的顶点各不相各不相同同,则称这样的路径为,则称这样的路径为简单路径简单路径。简单回路:简单回路:除了除了第一个和最后一个顶点外,其余各第一个和最后一个顶点外,其余各顶点顶点均不重复出现均不重复出现的回路为的回路为简单回路简单回路。返回主目录NoImage连通图连通图 连通图:连通图:在无向图在无向图G=G=(V V,EE)中,若从
16、)中,若从v vi i到到v vj j有路有路径相通,则称顶点径相通,则称顶点v vi i与与v vj j是连通的。如果对于图中的是连通的。如果对于图中的任意两个顶点任意两个顶点v vi i、v vj jVV,v vi i,v vj j都是连通的,则称都是连通的,则称该无向图该无向图G G为连通图。为连通图。连通分量连通分量:无向图中的:无向图中的极大连通子图极大连通子图称为该无向图称为该无向图的连通分量。的连通分量。返回主目录NoImage强连通图强连通图:在有向图:在有向图G=G=(V V,AA)中,若对于每对)中,若对于每对顶点顶点v vi i、v vj jVV且且v vi ivvj j
17、,从,从vivi到到v vj j和和v vj j到到v vi i都有路都有路径,则称该有向图为强连通图。径,则称该有向图为强连通图。强连通分量:强连通分量:有向图的有向图的极大强连通子图极大强连通子图称作有向图称作有向图的强连通分量的强连通分量。图图G1和图和图G3的连通分量见的连通分量见p157的图的图7.4所示所示返回主目录NoImage生成树生成树一个连通图的生成树是指一个一个连通图的生成树是指一个极小连通子图极小连通子图,它含,它含有图中的有图中的全部顶点全部顶点,但只有足已构成一棵树的,但只有足已构成一棵树的n-1n-1条边。条边。如图如图p157的图的图7.5所示。所示。返回主目录
18、NoImage7.2 图的存储结构图的存储结构图的存储结构方法有:图的存储结构方法有:邻接矩阵表示法;邻接矩阵表示法;邻接表;邻接表;邻接多重表;邻接多重表;十字链表十字链表 返回主目录NoImage邻接矩阵表示法邻接矩阵表示法 图的邻接矩阵表示法图的邻接矩阵表示法(Adjacency Matrix)也称作也称作数组表示法数组表示法。它采用它采用两个数组两个数组来表示图:一个是用于来表示图:一个是用于存储顶点信存储顶点信息息的一维数组,另一个是用于的一维数组,另一个是用于存储图中顶点之间关存储图中顶点之间关联关系联关系的二维数组,这个的二维数组,这个关联关系数组关联关系数组被称为被称为邻接邻接
19、矩阵矩阵。返回主目录NoImage若若G是一具有是一具有n个顶点的无权图,个顶点的无权图,G的邻接矩阵是具的邻接矩阵是具有如下性质的有如下性质的nn矩阵矩阵A:Ai,j=若若或(或(vi,vj)VR 0 反之反之G1和和G2的邻接矩阵见的邻接矩阵见p158的图的图7.6所示所示返回主目录NoImage若图若图G是一个有是一个有n个顶点的网,则它的邻接矩阵是具个顶点的网,则它的邻接矩阵是具有如下性质的有如下性质的nn矩阵矩阵A:Ai,j=Wij 若若或(或(vi,vj)VR 反之反之有向网及其邻接矩阵见有向网及其邻接矩阵见p158的图的图7.7所示。所示。返回主目录NoImage邻接矩阵表示法的
20、邻接矩阵表示法的C语言类型描述为:语言类型描述为:#define MAX_VERTEX_NUM 10 /*最多顶点个数*/#define INFINITY 32768 /*最多顶点个数*/typedef enumDG,DN,UDG,UDN GraphKind;/*图的种类:DG表示有向图,DN表示有向网,UDG表示无向图,UDN表示无向网*/typedef char VertexData;/*假设顶点数据为字符型*/typedef struct ArcNode AdjType adj;/*对于无权图,用1或0表示是否相邻;对带权图,则为权值类型*/OtherInfo info;ArcNode;
21、返回主目录NoImagetypedef struct VertexData vexsMAX_VERTEX_NUM;/*顶点向量*/ArcNode arcs MAX_VERTEX_NUMMAX_VERTEX_NUM;/*邻接矩阵*/int vexnum,arcnum;/*图的顶点数和弧数*/GraphKind kind;/*图的种类标志*/AdjMatrix;/*(Adjacency Matrix Graph)*/返回主目录NoImage邻接矩阵法的特点:邻接矩阵法的特点:1.存储空间:对于无向图而言,它的邻接矩阵是对存储空间:对于无向图而言,它的邻接矩阵是对称矩阵,所以可采用压缩存储法(下三角
22、),其存称矩阵,所以可采用压缩存储法(下三角),其存储空间只需储空间只需n(n-1)/2。但对于有向图而言,因为它。但对于有向图而言,因为它的弧是有方向的,它的邻接矩阵不一定是对称矩阵,的弧是有方向的,它的邻接矩阵不一定是对称矩阵,所以需要所以需要n2个存储空间。个存储空间。2.便于运算:便于运算:采用邻接矩阵表示法,便于判定图采用邻接矩阵表示法,便于判定图中任意两个顶点之间是否有边相连,即根据中任意两个顶点之间是否有边相连,即根据Ai,j=0或或1来判断。另外还便于求得各个顶点的度。来判断。另外还便于求得各个顶点的度。返回主目录NoImage 对于对于无向图无向图而言,其邻接矩阵第而言,其邻
23、接矩阵第 i 行元素之和就行元素之和就是图中第是图中第 i 个顶点的度:个顶点的度:TD(vi)=Ai,j j=1n 对于对于有向图有向图而言,其邻接矩阵第而言,其邻接矩阵第i行元素之和就是行元素之和就是图中第图中第i个顶点的出度,个顶点的出度,第第i i列元素之和就是图中第列元素之和就是图中第i i个顶点的入度。个顶点的入度。OD(vi)=Ai,j j=1nID(vi)=Aj,i j=1n顶点顶点i的出度:的出度:顶点顶点i的入度:的入度:返回主目录NoImage采用邻接矩阵存储法表示图,很便于实现图的一些采用邻接矩阵存储法表示图,很便于实现图的一些基本操作,如基本操作,如 FirstAdj
24、VertexFirstAdjVertex(G G,v v):):(1)首先,由首先,由LocateVertexLocateVertex(G G,v v)找到)找到v v在图中在图中的位置,即的位置,即v v在一维数组在一维数组vexsvexs中的序号中的序号i i。(2)二维数组二维数组arcsarcs中第中第i i行上第一个行上第一个adjadj域非零的域非零的分量所在的列号分量所在的列号j j,便是,便是v v的第一个邻接点在图的第一个邻接点在图G G中的中的位置。位置。(3)取出一维数组取出一维数组vexsjvexsj中的数据信息,即与顶中的数据信息,即与顶点点v v邻接的第一个邻接点的
25、信息。邻接的第一个邻接点的信息。注意注意:稀疏图不适于用邻接矩阵来存储,因为这样:稀疏图不适于用邻接矩阵来存储,因为这样会造成存储空间的浪费。会造成存储空间的浪费。返回主目录NoImage用邻接矩阵法创建有向网的算法如下:用邻接矩阵法创建有向网的算法如下:int LocateVertex(AdjMatrix*G,VertexData v)/*求顶点位置函数求顶点位置函数*/int j=Error,k;for(k=0;kvexnum;k+)if(G-vexsk=v)j=k;break;return(j);返回主目录NoImageint CreateDN(AdjMatrix*G)/*创建一个有向网
展开阅读全文