数据结构中的图课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构中的图课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 中的 课件
- 资源描述:
-
1、 第第7 7章章 图(图(GraphGraph)主讲:李耀国主讲:李耀国第七章第七章 图图 图是一种比线性表和树更为复杂的数据结构。在线性图是一种比线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有表中,数据元素之间仅有线性关系线性关系,每个元素最多只有一,每个元素最多只有一个直接前驱和一个直接后继。在树型结构中,数据元素之个直接前驱和一个直接后继。在树型结构中,数据元素之间存在明显的间存在明显的层次关系层次关系,并且每层的元素可能和下一层的,并且每层的元素可能和下一层的多个元素相邻,但只能和上一层的一个元素相邻。而多个元素相邻,但只能和上一层的一个元素相邻。而在图在图形结构中,结点之
2、间的关系可以是形结构中,结点之间的关系可以是任意任意的,图中的任意两的,图中的任意两个元素之间都可能相邻个元素之间都可能相邻。图是计算机应用过程中对实际问。图是计算机应用过程中对实际问题进行数学抽象和描述的强有力的工具,数据结构中对图题进行数学抽象和描述的强有力的工具,数据结构中对图的讨论侧重于在计算机中的讨论侧重于在计算机中如何表示图如何表示图以及如何实现图的操以及如何实现图的操作和作和应用应用等。等。第七章第七章 图和广义表图和广义表 7.1 7.1 图的定义和术语图的定义和术语 7.2 7.2 图的存储结构图的存储结构 7.3 7.3 图的遍历图的遍历 7.4 7.4 图的连通性问题图的
3、连通性问题 7.5 7.5 有向无环图及其应用有向无环图及其应用 7.5.1 7.5.1 拓扑排序拓扑排序 7.5.2 7.5.2 关键路径关键路径 7.6 7.6 最短路径最短路径7.1 图的定义和术语图的定义和术语图图由一个由一个顶点顶点的有穷非空集合的有穷非空集合V(G)V(G)和一个和一个弧弧的集的集合合E(G)E(G)组成,通常记做组成,通常记做G=(V,E)G=(V,E)。图中的。图中的顶点顶点即为即为数据结构中的数据结构中的数据元素数据元素,弧弧的集合的集合E E实际上是定义实际上是定义在顶点集合上的一个在顶点集合上的一个关系关系。用有序对。用有序对表示从表示从v v到到w w的
4、一条的一条弧弧。弧具有方向性,以带箭头的线段表。弧具有方向性,以带箭头的线段表示,通常称示,通常称v v为为弧尾弧尾或或始点始点,称,称w w为为弧头弧头或或终点终点,此,此时的图称为时的图称为有向图有向图。若图中从。若图中从v v到到w w有一条弧,同时有一条弧,同时从从w w到到v v也有一条弧,则以无序对也有一条弧,则以无序对(v,w)(v,w)代替这两个代替这两个有序对有序对和和,表示表示v v和和w w之间的一条之间的一条边边。此。此时的图在顶点之间不再强调方向性的特征,称为时的图在顶点之间不再强调方向性的特征,称为无无向图向图。7.1 图的定义和术语图的定义和术语图图G1G1是一个
5、有向图,是一个有向图,G1=(V1,A1)G1=(V1,A1)。其中。其中:V1=A,C,B,F,D,E,G V1=A,C,B,F,D,E,G A1=,A1=,ACBFDGE有向图有向图G17.1 图的定义和术语图的定义和术语 图图G2G2是一个无向图,是一个无向图,G2=(V2,E2)G2=(V2,E2)。其中:。其中:V2=A,B,C,D,E,FV2=A,B,C,D,E,F E2=(A,B),(A,C),(B,C),(B,E),(B,F),(C,F),E2=(A,B),(A,C),(B,C),(B,E),(B,F),(C,F),(C,D),(E,F),(C,E)(C,D),(E,F),(C
6、,E)ABCDEF无向图无向图G27.1 图的定义和术语图的定义和术语 在实际应用中,图的弧或边往往与具有一定意义在实际应用中,图的弧或边往往与具有一定意义的数相关,称这些数为的数相关,称这些数为权权(weight)(weight)。分别称带权的有。分别称带权的有向图和无向图为向图和无向图为有向网有向网和和无向网无向网。123456712345671918212756103311706475806018069584331324430无向网无向网有向网有向网7.1 图的定义和术语图的定义和术语 稀疏图和稠密图稀疏图和稠密图 假设用假设用n n表示图中顶点数目,用表示图中顶点数目,用e e表示表示
7、边或弧的数目。若不考虑顶点到其自身的弧或边,则对于边或弧的数目。若不考虑顶点到其自身的弧或边,则对于无向图,边数无向图,边数e e的取值范围是的取值范围是0 0到到n(n-1)/2n(n-1)/2。称具有。称具有n(n-n(n-1)/21)/2条边的无向图为条边的无向图为完全图完全图。对于有向图,弧的数目。对于有向图,弧的数目e e的的取值范围是取值范围是0 0到到n(n-1)n(n-1)。称具有。称具有n(n-1)n(n-1)条弧的有向图为条弧的有向图为有有向完全图向完全图。若。若enlognev是图中的一条弧,则称是图中的一条弧,则称u邻接邻接到到v,或,或v邻接自邻接自u。图中所。图中所
8、邻接到邻接到某顶点某顶点v的弧的数目,的弧的数目,称为该顶点的称为该顶点的入度入度,记作,记作:ID(v);反之,从某顶点;反之,从某顶点u出出发发的弧的数目,称为该顶点的的弧的数目,称为该顶点的出度出度,记作,记作:OD(u)。顶。顶点点v的入度和出度之的入度和出度之和和称为该顶点的称为该顶点的总度总度,简称为,简称为度度,记作记作:TD(v)。例如图。例如图G1中顶点中顶点B的入度的入度ID(B)=2,出,出度度OD(B)=3,度,度TD(B)=5。无向图中顶点的度定义为与该顶点相连的边的数目。无向图中顶点的度定义为与该顶点相连的边的数目。一般情况下,如果顶点一般情况下,如果顶点vi的度记
9、作的度记作TD(vi),则一个含有,则一个含有n个顶点,个顶点,e条边或弧的图,满足如下关系:条边或弧的图,满足如下关系:niivTDe1)(21ACBFDGE7.1 图的定义和术语图的定义和术语 路径和回路路径和回路 若有向图若有向图G中中k+1个顶点之间都个顶点之间都有弧存在,则这个顶点的序列有弧存在,则这个顶点的序列v0,v1,vk为为从顶点从顶点v0到顶点到顶点vk的一条的一条有向路径有向路径,路径中,路径中弧的数目定义为弧的数目定义为路径长度路径长度。若序列中的顶点。若序列中的顶点都不相同,则为都不相同,则为简单路径简单路径。对无向图,相邻。对无向图,相邻顶点之间存在边的顶点之间存在
10、边的k+1个顶点序列构成一条个顶点序列构成一条长度为长度为k的的无向路径无向路径。如若。如若v0和和vk是同一个顶是同一个顶点,则是一条由某个顶点出发又回到自身的点,则是一条由某个顶点出发又回到自身的路径,称这种路径为路径,称这种路径为回路回路或或环环。7.1 图的定义和术语图的定义和术语 连通图和连通分量连通图和连通分量 若无向图中任意两个若无向图中任意两个顶点之间都存在一条无向路径,则称该无顶点之间都存在一条无向路径,则称该无向图为向图为连通图连通图。对有向图而言,若图中任。对有向图而言,若图中任意两个顶点之间都存在一条有向路径,则意两个顶点之间都存在一条有向路径,则称该有向图为称该有向图
11、为强连通图强连通图。非连通图中的各。非连通图中的各个极大连通子图称为该图的个极大连通子图称为该图的连通分量连通分量。ABCDEFACBFDGE非强连通图和强连通分量非强连通图和强连通分量非连通图和连通分量非连通图和连通分量7.1 图的定义和术语图的定义和术语 图的抽象数据类型图的抽象数据类型ADT Graph ADT Graph 数据对象数据对象V:VV:V是具有相同特性的数据元素的集合,称为顶点集。是具有相同特性的数据元素的集合,称为顶点集。数据关系数据关系R:R=VRR:R=VR VR=|v,wP(v,w),VR=|v,wP(v,w),表示从到的弧表示从到的弧,谓词谓词P(v,w)P(v,
12、w)定义了弧定义了弧的意义或信息的意义或信息 基本操作:基本操作:CreateGraph(&G,V,VR)CreateGraph(&G,V,VR)n初始条件:初始条件:V V是图的顶点集,是图的顶点集,VRVR是图中弧的集合。是图中弧的集合。n操作结果:按操作结果:按V V和和VRVR的定义构造图的定义构造图G G。DestoryGraph(&G)DestoryGraph(&G)n初始条件:图初始条件:图G G存在。存在。n操作结果:销毁图操作结果:销毁图G G。LocateVex(G,u)LocateVex(G,u)n初始条件:图初始条件:图G G存在,存在,u u和和G G中顶点有相同特征
13、。中顶点有相同特征。n操作结果:若操作结果:若G G中存在顶点中存在顶点u u,则返回该顶点在图中的位置;否则返回其他信息。,则返回该顶点在图中的位置;否则返回其他信息。more7.1 图的定义和术语图的定义和术语 GetVex(G,v)GetVex(G,v)n初始条件:图初始条件:图G G存在,存在,v v是是G G中的某个顶点。中的某个顶点。n操作结果:返回操作结果:返回v v的值。的值。PutVex(&G,v,value)PutVex(&G,v,value)n初始条件:图初始条件:图G G存在,存在,v v是是G G中的某个顶点。中的某个顶点。n操作结果:对操作结果:对v v赋值赋值va
14、luevalue。FirstAdjVex(G,v)FirstAdjVex(G,v)n初始条件:图初始条件:图G G存在,存在,v v是是G G中的某个顶点。中的某个顶点。n操作结果:返回操作结果:返回v v的第一个邻接点,若该顶点在的第一个邻接点,若该顶点在G G中无邻接点,则返中无邻接点,则返回空。回空。NextAdjVex(G,v,w)NextAdjVex(G,v,w)n初始条件:图初始条件:图G G存在,存在,v v是是G G中的某个顶点,中的某个顶点,w w是是v v的邻接顶点。的邻接顶点。n操作结果:返回操作结果:返回v v的的(相对于相对于w w的的)下一个邻接点。若下一个邻接点。
15、若w w是是v v的最后一个的最后一个邻接点,则返回空。邻接点,则返回空。more7.1 图的定义和术语图的定义和术语 InsertVex(&G,v)InsertVex(&G,v)n 初始条件:图初始条件:图G G存在,存在,v v和图中顶点有相同特征。和图中顶点有相同特征。n 操作结果:在图操作结果:在图G G中增添新顶点中增添新顶点v v。DeleteVex(&G,v)DeleteVex(&G,v)n 初始条件:图初始条件:图G G存在,存在,v v是是G G中的某个顶点。中的某个顶点。n 操作结果:删除操作结果:删除G G中顶点中顶点v v及其相关的弧。及其相关的弧。InsertArc(
16、&G,v,w)InsertArc(&G,v,w)n 初始条件:图初始条件:图G G存在,存在,v v和和w w是是G G中的两个顶点。中的两个顶点。n 操作结果:在图操作结果:在图G G中增添弧中增添弧,若,若G G是无向的,则还是无向的,则还增添对称弧增添对称弧。DeleteArc(&G,v,w)DeleteArc(&G,v,w)n 初始条件:图初始条件:图G G存在,存在,v v和和w w是是G G中的两个顶点。中的两个顶点。n 操作结果:在图操作结果:在图G G中删除弧中删除弧,若,若G G是无向的,则还是无向的,则还删除对称弧删除对称弧。more7.1 图的定义和术语图的定义和术语 D
17、FSTraverse(G,v,visit()DFSTraverse(G,v,visit()n 初始条件:图初始条件:图G G存在,存在,v v是是G G中的某个顶点,中的某个顶点,visitvisit是是针对顶点的应用函数。针对顶点的应用函数。n 操作结果:从顶点操作结果:从顶点v v起深度优先遍历图起深度优先遍历图G G,并对每个,并对每个顶点调用函数顶点调用函数visitvisit一次且仅一次。一旦一次且仅一次。一旦visit()visit()失失败,则操作失败。败,则操作失败。BFSTraverse(G,v,visit()BFSTraverse(G,v,visit()n 初始条件:图初始
18、条件:图G G存在,存在,v v是是G G中的某个顶点,中的某个顶点,visitvisit是是针对顶点的应用函数。针对顶点的应用函数。n 操作结果:从顶点操作结果:从顶点v v起广度优先遍历图起广度优先遍历图G G,并对每个,并对每个顶点调用函数顶点调用函数visitvisit一次且仅一次。一旦一次且仅一次。一旦visit()visit()失失败,则操作失败。败,则操作失败。ADT GraphADT Graph7.2 图的存储结构图的存储结构图是一种典型的复杂结构,图中顶点可能同任意一图是一种典型的复杂结构,图中顶点可能同任意一个其他顶点之间存在关系。因此,图没有顺序映象个其他顶点之间存在关系
19、。因此,图没有顺序映象的存储结构。图有两种常用的存储结构。的存储结构。图有两种常用的存储结构。7.2.1 7.2.1 图的数组图的数组(邻接矩阵邻接矩阵)存储表示存储表示 邻接矩阵是用于描述图中顶点之间的关系邻接矩阵是用于描述图中顶点之间的关系(及弧或边的权及弧或边的权)的矩阵,假设图中顶点数为的矩阵,假设图中顶点数为n n,则邻接矩阵,则邻接矩阵A=(aA=(ai,ji,j)m m*n n定义定义为:为:nAij=1 若若Vi和和Vj之间有弧或边存在之间有弧或边存在0 Vi和和Vj之间没有弧或边存在之间没有弧或边存在7.2.1 图的数组图的数组(邻接矩阵邻接矩阵)存储表示存储表示 00000
20、00100000000010100000100001000001101000000010ACBFDGEABCDEF 010110100110000100111011110101000110有向图有向图G1无向图无向图G2G1的邻接矩阵的邻接矩阵G2的邻接矩阵的邻接矩阵7.2.1 图的数组图的数组(邻接矩阵邻接矩阵)存储表示存储表示一般情况下,图中没有邻接到自身的弧,因此矩阵中主对角一般情况下,图中没有邻接到自身的弧,因此矩阵中主对角线全为零。由于无向图中一条边视为一对弧,则无向图的邻线全为零。由于无向图中一条边视为一对弧,则无向图的邻接矩阵必然是对称矩阵。接矩阵必然是对称矩阵。网的邻接矩阵定义
21、中,当网的邻接矩阵定义中,当v vi i到到v vj j有弧相邻接时,有弧相邻接时,a ai,ji,j的值为该的值为该弧上的权值,否则为弧上的权值,否则为。1234567706475806018069584331324430 6943755818070443230603164807.2.1 图的数组图的数组(邻接矩阵邻接矩阵)存储表示存储表示有向图的邻接矩阵大多为有向图的邻接矩阵大多为稀疏矩阵稀疏矩阵,可以采用,可以采用压缩压缩存储表示。用存储表示。用二维数组二维数组表示更为方便,它和顶点信息等其他图的信息一起构成图的一种存储表示表示更为方便,它和顶点信息等其他图的信息一起构成图的一种存储表示
22、const INFINITY_INT_MAX=MAX;/最大值最大值设为设为MAXconst MAX_VERTEX_NUM=20;/最大顶点个数最大顶点个数typedef enum DG,DN,AG,ANGraphKind;/图类型图类型(有向图、有向网、无向图、有向图、有向网、无向图、无向网无向网)typedef struct ArcCellVRType adj;/VRType为顶点的关系类型。对无权图,用为顶点的关系类型。对无权图,用1或或0表示是否相邻;表示是否相邻;对带权图则为权值类型对带权图则为权值类型InfoType*info;/指向该弧相关信息的指针指向该弧相关信息的指针ArcC
23、ell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef structVertexType vexsMAX_VERTEX_NUM;/描述顶点的数组描述顶点的数组AdjMatrix arcs;/邻接矩阵邻接矩阵int vexnum,arcnum;/图的当前顶点数和弧图的当前顶点数和弧(边边)数数GraphKind kind;/图的种类标志图的种类标志MGraph;vexs00.adjvexs00.adjvexs00.infovexs00.infovexsvexsMAX_VERTEX_NUMMAX_VERTEX_NUMMAX_MAX_VERTEX_NUMV
24、ERTEX_NUM arcsarcsvexnumvexnumarcnumarcnumkindkind7.2.2图的邻接表存储表示图的邻接表存储表示 邻接表邻接表是图的一种链式存储表示方法,是图的一种链式存储表示方法,它类似于树的孩子链表。在有向图的它类似于树的孩子链表。在有向图的邻接表中,从同一个顶点出发的弧链邻接表中,从同一个顶点出发的弧链接在同一链表中,接在同一链表中,邻接表中结点的个邻接表中结点的个数恰好为图中弧的个数数恰好为图中弧的个数。在无向图的。在无向图的邻接表中,同一条边有两个结点,分邻接表中,同一条边有两个结点,分别出现在和它相关的两个顶点的链表别出现在和它相关的两个顶点的链表
25、中,因此中,因此无向图的邻接表中结点个数无向图的邻接表中结点个数是边的是边的两两倍倍。7.2.2图的邻接表存储表示图的邻接表存储表示ACBFDGE有向图有向图G1MAX_VERTEX_NUMABCEDFG -01234561361242457.2.2图的邻接表存储表示图的邻接表存储表示MAX_VERTEX_NUMABCEDF-012345ABCDEF无向图无向图G22 1024015 345 2 125 124 7.2.2图的邻接表存储表示图的邻接表存储表示 邻接表定义如下:邻接表定义如下:const MAX_VERTEX_NUM=20;typedef struct ArcNodeint ad
展开阅读全文