图-数据结构课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《图-数据结构课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件
- 资源描述:
-
1、“图图”专题专题2012年11级新队员暑假ACM培训主讲:廖枝平2022-12-91 1)1)了解图的定义和术语;了解图的定义和术语;2)2)掌握图的各种存储结构;掌握图的各种存储结构;3)3)掌握图的深度优先搜索和广度优先搜索遍历算掌握图的深度优先搜索和广度优先搜索遍历算法;法;4)4)理解最小生成树、最短路径、拓扑排序等图的理解最小生成树、最短路径、拓扑排序等图的常用算法。常用算法。主要介绍图的基本概念、图的存储结构和有关主要介绍图的基本概念、图的存储结构和有关图的一些常用算法。学习目的:图的一些常用算法。学习目的:2022-12-92 集合集合:数据元素间的关系是同属一个集合。数据元素间
2、的关系是同属一个集合。线性结构:线性结构:结点间的关系是线性关系,除开始结点和结点间的关系是线性关系,除开始结点和终端结点外,每个结点只有一个直接前趋和直接后继。终端结点外,每个结点只有一个直接前趋和直接后继。树形结构:树形结构:结点间的关系实质上是层次关系,同层上结点间的关系实质上是层次关系,同层上的每个结点可以和下一层的零个或多个结点(即孩子)的每个结点可以和下一层的零个或多个结点(即孩子)相关,但只能和上一层的一个结点(即双亲)相关(根相关,但只能和上一层的一个结点(即双亲)相关(根结点除外)。结点除外)。图(图(GraphGraph)结构:结构:对结点(图中常称为顶点)的前趋对结点(图
3、中常称为顶点)的前趋和后继个数不加限制的,即结点之间的关系是任意的。和后继个数不加限制的,即结点之间的关系是任意的。图图是一种较线性表和树更为复杂的是一种较线性表和树更为复杂的非线性结构非线性结构。是对。是对结点的前趋和后继个数不加限制的数据结构,用来描述结点的前趋和后继个数不加限制的数据结构,用来描述元素之间元素之间“多对多多对多”的关系。的关系。2022-12-932022-12-94 2022-12-952022-12-96(a)G1(b)G2(c)G3(d)G452341123467522223645212022-12-97 在图在图7-17-1中,图中,图(a)a)为无向图,其中为无
4、向图,其中G1G1的顶点集的顶点集合和边集合分别为:合和边集合分别为:V(G1)=1V(G1)=1,2 2,3 3,4 4,5 5,6 6,77,E(G1)=(1E(G1)=(1,2)2),(l(l,3)3),(2(2,3)3),(3(3,4)4),(3(3,5)5),(5(5,6)6),(5(5,7)7)。图图(c)c)为有向图,其中为有向图,其中G3G3的顶点集合和弧集合的顶点集合和弧集合分别为分别为V(G3)=1V(G3)=1,2 2,3 3,4 4,5 5,66,E(G3)=,2022-12-987.1.2 图的基本术语图的基本术语1 1 顶点的度顶点的度 与顶点与顶点v v相关的相关
5、的边边或弧的数目或弧的数目称作顶点称作顶点v v的度。的度。在有向图在有向图中,一个顶点依附的弧头数目,称为该顶点的入度。一个中,一个顶点依附的弧头数目,称为该顶点的入度。一个顶点依附的弧尾数目,称为该顶点的出度,某个顶点的入顶点依附的弧尾数目,称为该顶点的出度,某个顶点的入度和出度之和称为该顶点的度。度和出度之和称为该顶点的度。例如图例如图7-17-1中,无向图中,无向图G1G1中顶点中顶点3 3的度为的度为4 4,顶点,顶点5 5的度为的度为3 3。例如在图例如在图7-17-1中,有向图中,有向图G3G3中顶点中顶点1 1的出度的出度OD(1)=3OD(1)=3,入入度度ID(1)=1ID
6、(1)=1,其度其度TD(1)=4TD(1)=4。2022-12-99 在无向图在无向图G中,若存在一个顶点序列中,若存在一个顶点序列Vp,Vi1,Vi2,Vin,Vq,使得(使得(Vp,Vi1),(Vi1,Vi2),.,(Vin,Vq)均属于均属于E(G),),则称则称顶点顶点Vp到到Vq存在一条路径。存在一条路径。若一条路径上除起点和终点可以相同外,其余顶点均不相若一条路径上除起点和终点可以相同外,其余顶点均不相同,则称此路径为同,则称此路径为简单路径简单路径。起点和终点相同的路径称为起点和终点相同的路径称为回路回路;简单路径组成的回路称为简单回路。简单路径组成的回路称为简单回路。路径上经
7、过的路径上经过的边的数目边的数目称为该路径的称为该路径的路径长度路径长度。2022-12-9102022-12-911 边边:无向图中无向图中顶点的偶对,写成(顶点的偶对,写成(VxVx,VyVy)或(或(VyVy,VxVx)。)。弧弧:有向图中顶点的偶对有向图中顶点的偶对,Vx,VyVx,Vy表示从表示从VxVx到到VyVy。弧头弧头:弧的终点弧的终点 弧尾弧尾:弧的起点弧的起点弧弧 VxVx,VyVy 弧尾弧尾Vx 弧头弧头Vy2022-12-912 设有两个图设有两个图 G(V,E)和和 G(V,E)。若若 V V 且且 E E,则称则称 图图G 是是 图图G 的子图。的子图。2022-
8、12-913(a)(b)52341364521图图7-3 7-3 连通分量和强连通分量连通分量和强连通分量 v vi i和和v vj j(v vi i,v vj jVV)图图7-17-1中中G1G1是连通图,是连通图,G2G2是非连通图。是非连通图。G2 G2中有中有3 3个连通分量,如图个连通分量,如图7-37-3(a a)所示。所示。2022-12-914(a)无向网 (b)有向网 图 7-4 无向带权图和有向带权图 5 3 1 2 4 4 1 6 7 2 3 5 8 A B C 2 1 5 3 4 或弧或弧权可以代权可以代表一个顶点到另一个顶点的距离,耗费等。表一个顶点到另一个顶点的距离
9、,耗费等。一般称为一般称为如图如图7-47-4所示所示 2022-12-915 非连通图非连通图的生成树则组成一个的生成树则组成一个生成森林生成森林。若图中有。若图中有n n个顶点个顶点,m m个连通分量,则生成森林中有个连通分量,则生成森林中有n-mn-m条边。条边。2022-12-916 图的基本运算也包括查找、插入和删除。图的基本运算也包括查找、插入和删除。(1 1)顶点定位运算)顶点定位运算 确定顶点确定顶点v v在图中的位置;在图中的位置;(2 2)取顶点运算)取顶点运算 求取图中第求取图中第i i个顶点;个顶点;(3 3)求第一个邻接点运算)求第一个邻接点运算 求图中顶点求图中顶点
10、v v的第一个邻接点;的第一个邻接点;(4 4)求下一个邻接点运算)求下一个邻接点运算 已知已知w w为图中顶点为图中顶点v v的某个邻接点,的某个邻接点,求顶点求顶点w w的下一个邻接点;的下一个邻接点;(5 5)插入顶点运算)插入顶点运算 在图中增添一个顶点在图中增添一个顶点v v作为图的第作为图的第n+1n+1个顶个顶点,其中点,其中n n为插入该顶点前图的顶点个数;为插入该顶点前图的顶点个数;(6 6)插入弧运算)插入弧运算 在图中增添一条从顶点在图中增添一条从顶点v v到顶点到顶点w w的弧。的弧。(7 7)删除顶点运算)删除顶点运算 从图中删除顶点从图中删除顶点v v以及所有与顶点
11、以及所有与顶点v v相关联相关联的弧。的弧。(8 8)删除弧运算)删除弧运算 从图中删除一条从顶点从图中删除一条从顶点v v到顶点到顶点w w的弧。的弧。2022-12-917 邻接矩阵邻接矩阵(Adjacency Matrix)是表示顶点之间相邻关系的是表示顶点之间相邻关系的矩阵。设矩阵。设G(V,E)是具有是具有n个顶点的图,则个顶点的图,则G的邻接矩阵的邻接矩阵是具有如下性质的是具有如下性质的n阶方阵。阶方阵。无向图的邻接矩阵是以主对角线对称的,有向图的邻接矩无向图的邻接矩阵是以主对角线对称的,有向图的邻接矩阵可能是不对称的。阵可能是不对称的。在有向图中:在有向图中:第第 i 行行 1
12、的个数就是顶点的个数就是顶点 i 的出度,的出度,第第 j 列列 1 的个数就是顶点的个数就是顶点 j 的入度。的入度。在无向图中在无向图中,第第 i 行行(列列)1 的个数就是顶点的个数就是顶点i 的度。的度。A Aijij=1 1 对无向图若存在边对无向图若存在边(v(vi i,v,vj j),),对有向图若存在弧对有向图若存在弧v 0 0 反之反之2022-12-91814320011000010100101(a)(b)图图7-6 有向图及其邻接矩阵有向图及其邻接矩阵 154320010101011001001110010011(a)(b)图图7-5 无向图及其邻接矩阵无向图及其邻接矩阵
13、2022-12-919 对于无向图,(对于无向图,(vi,vj)和(和(vj,vi)表示同一条边,因表示同一条边,因此,在邻接矩阵中此,在邻接矩阵中Aij=Aji。无向图的邻接矩阵是(关于主对角线)对称矩阵,可用无向图的邻接矩阵是(关于主对角线)对称矩阵,可用主对角线以上(或以下)的部分表示。主对角线以上(或以下)的部分表示。对有向图,弧对有向图,弧和和表示方向不同的两条弧,表示方向不同的两条弧,Aij和和Aji表示不同的弧,所以有向图的邻接矩阵一般不具有对表示不同的弧,所以有向图的邻接矩阵一般不具有对称性。称性。邻接矩阵表示法适合于以顶点为主的运算。邻接矩阵表示法适合于以顶点为主的运算。20
14、22-12-920对于对于有向图有向图,顶点,顶点vi的的出度出度OD(vi)等于邻接矩阵等于邻接矩阵第第i行行元素元素之和;顶点之和;顶点vi的的入度入度ID(vi)等于邻接矩阵等于邻接矩阵第第i列列元素之和,即元素之和,即:对于对于无向图无向图,顶点顶点v vi i的度等于邻接矩阵第的度等于邻接矩阵第i i行的元素之和行的元素之和,即:,即:njjiA1,njjiA1,njijA1,TDTD(v vi i)=对于对于带权图的邻接矩阵带权图的邻接矩阵,定义为:,定义为:Aij=Wij 若(vi,vj)或E,Wij 为该边或弧的权 反之2022-12-921 无向图的邻接矩阵 A B C D
15、DCBAA0111101111011110A B C D 2022-12-922 有向图的邻接矩阵 A B C A B C CBAB0101001102022-12-923 使用邻接矩阵存储结构,可用一维数组表示图的顶点集合,使用邻接矩阵存储结构,可用一维数组表示图的顶点集合,用二维数组表示图的顶点之间关系(边或弧)的集合,数据类型用二维数组表示图的顶点之间关系(边或弧)的集合,数据类型定义如下:定义如下:#define MAX_VERTEX_NUM 20 /最大顶点数最大顶点数typedef int AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;/邻接矩阵类型邻
16、接矩阵类型typedef struct VertexType vexsMAX_VERTEX_NUM;/顶点表顶点表AdjMatrix arcs;/邻接矩阵邻接矩阵int vexnum,arcnum;/图的顶点数和弧数图的顶点数和弧数 MGraph;由于一般图的边或弧较少,其邻接矩阵的非零元素较少,属稀由于一般图的边或弧较少,其邻接矩阵的非零元素较少,属稀疏矩阵,因此会造成一定存储空间的浪费。疏矩阵,因此会造成一定存储空间的浪费。2022-12-924建立邻接矩阵算法建立邻接矩阵算法:void CreateMGraph(MGraph&G)int i,j,k,w;char v1,v2;printf
17、(Input vexnum&arcnum:);scanf(%d,%d,&G.vexnum,&G.arcnum);printf(Input Vertices:);scanf(%s,G.vexs);for(i=0;iG.vexnum;i+)scanf(%c,&G.vexsi);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=0;for(k=0;kG.arcnum;k+)printf(Input Arcs(v1,v2&w):n);scanf(%c%c,%d,&v1,&v2,&w);i=LocateVex(G,v1);j=LocateVex(G,v
18、2);j=LocateVex(G,v2);G.arcsij=w;G.arcsji=w;return;2022-12-925void PrintMGraph(MGraph G)/输出输出 int i,j;printf(Output Vertices:);printf(%s,G.vexs);printf(n);printf(Output AdjMatrix:n);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)printf(%4d,G.arcsij);printf(n);return;2022-12-926 图的链式存储结构图的链式存储结构 1)1)为每个顶点建
19、立一个单链表,为每个顶点建立一个单链表,2)2)第第i i个单链表中包含顶点个单链表中包含顶点ViVi的所有邻接顶点。的所有邻接顶点。邻接表是图的一种链式存储结构。邻接表是图的一种链式存储结构。类似于树的孩子链表类似于树的孩子链表表示法。表示法。在邻接表中为图中每个顶点建立一个单链表,用在邻接表中为图中每个顶点建立一个单链表,用单链表中的一个结点表示依附于该顶点的一条边(或表示单链表中的一个结点表示依附于该顶点的一条边(或表示以该顶点为弧尾的一条弧),称为边(或弧)结点。以该顶点为弧尾的一条弧),称为边(或弧)结点。2022-12-927 表结点表结点头结点头结点adjvexnextarcin
20、fodatafirstarc2022-12-9282022-12-9292022-12-930(a)1304421302143231501234(b)41320212310123(c)143213003201232022-12-9312022-12-932无向图、有向图 A B C D A B C 2022-12-933无向图的邻接表 AV BV DV CV B C D A B D A C D A B C 2022-12-934 AV BV CV C B C B 有向图的邻接表2022-12-9352022-12-936int LocateVex(ALGraph G,char u)int i;
21、for(i=0;iG.vexnum;i+)if(u=G.verticesi.data)return i;if(i=G.vexnum)printf(Error u!n);exit(1);return 0;void CreateALGraph_adjlist(ALGraph&G)int i,j,k,w;char v1,v2;ArcNode*p;printf(Input vexnum&arcnum:);scanf(%d,%d,&G.vexnum,&G.arcnum);printf(Input Vertices:);for(i=0;iG.vexnum;i+)scanf(%c,&G.verticesi.
22、data);G.verticesi.firstarc=NULL;2022-12-937 printf(Input Arcs(v1,v2&w):n);for(k=0;kadjvex=j;p-info=w;p-nextarc=G.verticesi.firstarc;G.verticesi.firstarc=p;return;2022-12-938hlinkhlink指向弧头相同的下一条弧,指向弧头相同的下一条弧,tlinktlink指向弧尾相同的指向弧尾相同的下一条弧;下一条弧;datadata顶点信息,顶点信息,firstinfirstin以该顶点为头的第一个弧结点,以该顶点为头的第一个弧结点
23、,firstoutfirstout以该结点为尾的第一个弧结点以该结点为尾的第一个弧结点headvextailvexhlinktlinkinfofirstindatafirstout顶点结点顶点结点弧结点弧结点2022-12-939432132312012030103212022-12-9402022-12-941markivex ilinkjvexjlinkdatafirstedge2022-12-9422301154323441201304321图图7-9为图为图7-5(a)无向图的邻接多重表。无向图的邻接多重表。2022-12-9432022-12-944 但是,在图中有回路,从图中某一顶
24、点出发访问图中其它顶但是,在图中有回路,从图中某一顶点出发访问图中其它顶点时,可能又会回到出发点,而图中或许还有顶点没有访问到,点时,可能又会回到出发点,而图中或许还有顶点没有访问到,因此,图的遍历较树的遍历更复杂。因此,图的遍历较树的遍历更复杂。图的遍历算法是求解图的连通性问题、拓扑排序和求关键路图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。径等算法的基础。图的遍历顺序有两种:图的遍历顺序有两种:对每种搜索顺序,访问各顶点的顺序也不是唯一的。对每种搜索顺序,访问各顶点的顺序也不是唯一的。2022-12-9451 深度优先搜索思想深度优先搜索思想 深度优先搜索遍历类似于树
25、的先序遍历。假定给定图深度优先搜索遍历类似于树的先序遍历。假定给定图G的初态是的初态是所有顶点均未被访问过,在所有顶点均未被访问过,在G中任选一个顶点中任选一个顶点i作为遍历的初始点,作为遍历的初始点,则深度优先搜索则深度优先搜索递归调用包含以下操作:递归调用包含以下操作:(1 1)访问搜索到的未被访问的邻接点;)访问搜索到的未被访问的邻接点;(2 2)将此顶点的)将此顶点的visitedvisited数组元素值置数组元素值置1 1;(3 3)搜索该顶点的未被访问的邻接点,若该邻接点存在,则从此)搜索该顶点的未被访问的邻接点,若该邻接点存在,则从此邻接点开始进行同样的访问和搜索。邻接点开始进行
展开阅读全文