《数据结构C语言图.pptx》由会员分享,可在线阅读,更多相关《数据结构C语言图.pptx(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章图内容7.1 图的概念7.2 图的存贮结构7.3 图的遍历7.4 图的最小生成树7.5 拓扑排序7.6 关键路径7.7 最短路径第1页/共52页7.1 7.1 图的概念 每个结点有任意多个前驱和后继结点.图也可以二元组表示:定义Graph=(v,E)v:表示元素集合 E:元素之间的关系现举两个例子,如下图:例一例二无向图中(1,2)和(2,1)代表同一边有向图中和表示两个不同的方向边以为例,在中:1称为此边的起点或尾(弧尾)2称为此边的终点或头(弧头)边的方向规定为弧尾弧头第2页/共52页 V(G1)=1,2,3,4顶点集合;E(G1)=,边的集合(顶点关系)V(G2)=1,2,3,4,
2、5顶点集合;E(G2)=(1,2),(1,4),(2,3),(2,5),(3,4),(3,5)边的集合第3页/共52页 1、完全图:在一个有N个顶点的图中,若每个顶点到其它(N-1)顶点都有一条边,则 图中有N个顶点且有(N*(N-1)/2)条边的图称为完全图。2、邻接点:对无向图G=(V,E),若有(V1,V2)属于E则称V1和V2互为邻接点。3、相关边:两个相邻接的点连成的边叫做这两个结点的相关边。第4页/共52页4、度:与每个顶点相连的边的数叫该点的度。5、入度:对有向图中某结点的弧头数(边的终点)称为该结点的入度。6、出度:对有向图中某结点的弧尾数(边的终点)称为该结点的出度。7、路径
3、:在一图中若从某个顶点VP出发,沿着一些边经过顶点V1,V2,,VM到达VG则称路径8、回路:从一顶点出发又回到该顶点,则所经过的路径称为回路。第5页/共52页9、子图 若G和G是两个图,且存在着V(G)V(G)和E(G)E(G)的关系,则称G是G的子图1010、有关连通的概念连通:在无向图中,若从顶点VI到顶点VJ之间有路径则称此二顶点是连通的。连通图:如果图中任意一对顶点之间都是连通的,则称此图为连通图。强连通:对于有向图,若从顶点VI到顶点VJ到顶点VI之间都有路径,则称这两点是强连通的。强连通图:图中任何一对顶点都是强连通的,则此图叫强连通图。第6页/共52页连通分量:非连通图中的每一
4、个连通部分叫连通分量。强连通分量:有向图中极大强连通子图称为有向图的强连通分量。1111、生成树一个连通的生成树,它含有图中全部顶点,但只有足以构成树的N-1条边(N顶点个数)如图P159第7页/共52页12.12.权、网权:有些图对应每条边有一相应的数值。这个数值叫该边的权。网:这种带权的图叫网。注:不同网络的权有不同的意义:电网络权可以是阻抗,运输网络中的权可以是路程长度,运费等。第8页/共52页(1)(1)LOC_VERTEX(G,v)LOC_VERTEX(G,v)顶点定位函数顶点函数:确定顶点在图G中的位置.若图中无此顶点,则函数值为零.(2)(2)GET_VERTEX(G,i)GET
5、_VERTEX(G,i)取顶点函数取点函数:求图G中第i个顶点.若i图G中顶点数则函数值为零.(3)(3)FIRST_ADJ(G,v)FIRST_ADJ(G,v)求第一个邻接点函数求第一个邻接点函数:求图G中顶点V的第一个邻接点.若v没有邻接点或图G中无顶点v,则函数值为零.P156第9页/共52页7.2 7.2 图的存贮结构邻接矩阵表示法-表示各顶点之间的邻接关系 可以借助二维数组作为存贮结构,故又称为数组表示法.第10页/共52页 邻接表是由邻接矩阵改造而来的一种链接结构,它只考虑非零元素,因而节省了零元素所占的存贮空间.逆邻接表 链表中每个结点表示邻接矩阵中该顶点的列中每个非零元素第11
6、页/共52页图的存贮结构说明邻接矩阵是一个n*n的方阵n为图的顶点数矩阵每一行分别对应图的各个顶点矩阵的每一列分别对应图的各个顶点1规定矩阵元素aij=0第12页/共52页几点说明:1.如果图的各边是带权的,也可以用邻接矩阵来表示,只需将矩阵中1元素换成相应边的权值.2.邻接矩阵表示法对于以图的顶点为主的运算比较适用.3.除完全图外,其他图的邻接矩阵有许多零元素,特别是当n值较大,而边数又少是,则此矩阵称为稀疏矩阵.浪费存储空间.第13页/共52页邻接表与邻接矩阵的关系:1.与邻接矩阵的每一行有一个线形链接表.2.链接表的表头对应着邻接矩阵该行的顶点.3.链接表中的每个结点对应着邻接矩阵正中该
7、行的一个非零元素无向图:一个非零元素表示与该行顶点相邻接的另一个顶点有向图:非零元素则表示该行顶点为起点的一条边的终点第14页/共52页几点说明:1.1.在邻接表中的每个线性链接表中各结点的的顺序是任意的.2.2.邻接表中的各个线性链接表不说明它们顶点之间的邻接关系.3.3.对于无向图:某顶点的度数=该顶点对应的线性链表的结点数对于有向图:某顶点的 出度 数=该顶点对应的线性链表的结点数 第15页/共52页逆邻接表 链表中每个结点表示邻接矩阵中该顶点的列中每个非零元素第16页/共52页7.3图的遍历什么叫图的遍历 从图的任意点出发沿着一些边访问图中的所有顶点,且使每个顶点仅被访问一次,这就叫图
8、的遍历.第17页/共52页图的遍历的两种方法深度优先搜索dfsdfs广度优先搜索bfsbfs第18页/共52页1.1.深度优先搜索dfsdfs方法:从图中指定的起点v0出发(先访问v)访问它的任意相邻接的顶点w1,再访问w1的任一个未访问的相邻接顶点w2,如此下去,直到某顶点已无被访问过的顶点,则返回一步找前一个顶点的其他沿未被访问的邻接顶点,重复以上过程直到所有的顶点都被访问第19页/共52页例:例:顶点的访问序列:V1V2V4V8V5V3V6V7第20页/共52页2.2.广度优先搜索bfsbfs方法:从图指定的起点v0出发,访问与它相邻的所有顶点w1,w2,.然后再依次访问w1,w2.邻接
9、的尚未被访问的所有顶点,再从这些顶点出发访问与它们相邻接的尚未被访问的顶点,直到所有顶点均被访问过为止.第21页/共52页例:例:顶点的访问序列:V1V2V3V4V5V6V7V8第22页/共52页7.4 7.4 图的最小生成树无向图的连通分量和生成树1.1.连通分量 非连通图的每一个连通部分叫连通分量.第23页/共52页P159G3图7.3(a)邻接表第24页/共52页说明:该图中包括三个连通分量,若按dfs分别从三个顶点(I,D,B)出发可得到三个连通分量的顶点序列:I,G,K,HD,EB,M,L,J,A,F,C第25页/共52页2.图的生成树 图中全部顶点和搜索过程所经过的边,构成该连通图
10、的生成树.例如上图搜索遍历后得到的三棵树第26页/共52页由此可以总结生成树的特点:任意两个顶点之间有且仅有一条路径如再增加一条边,就会出现一条回路,如果去掉一条边此子图就会变成非连通图.第27页/共52页最小生成树1什么叫最小生成树 给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.2.求最小生成树的算法(1)克鲁斯卡尔算法(2)普里姆算法第28页/共52页例:例:第29页/共52页克鲁斯卡尔算法克鲁斯卡尔算法 方法:将图中边按其权值由小到大的次序顺序选取,若选边后不形成回路,则保留作为一条边,若形成回路则除去.依次选够(n-1)条边,即得最小生成树
11、.(n为顶点数)分析:该方法对于边相对比较多的不是很实用,浪费时间.第30页/共52页普里姆算法 方法:从指定顶点开始将它加入集合中,然后将集合内的顶点与集合外的顶点所构成的所有边中选取权值最小的一条边作为生成树的边,并将集合外的那个顶点加入到集合中,表示该顶点已连通.再用集合内的顶点与集合外的顶点构成的边中找最小的边,并将相应的顶点加入集合中,如此下去直到全部顶点都加入到集合中,即得最小生成树.第31页/共52页7.5有向无环图及其应用有向无环图:是一个无环的有向图.简称DAG图.有向无环图的作用:常用来描述一个工程或一个系统的进行的过程.第32页/共52页AOV网每个子计划称为活动.第33
12、页/共52页说明:在各个活动之间,有些必须按规定的先后次序进行,有些则没有次序要求.把这种活动之间的次序要求,可用一个有向图来表示.图中每个顶点代表一个活动.如果从顶点vi到顶点vj之间存在有向边则表示活动i必须先于活动j进行.这种图中用顶点表示活动的网络称为AOV网.AOV网的特点:在网中一定不能有有向回路.检测网中是否存在环,可用拓扑排序的方法.第34页/共52页拓扑排序1.什么叫拓扑排序将AOV网中各个顶点排列成一个有序序列,使得所有前驱和后继关系都能得到满足,而那些没有次序的顶点,在拓扑排序的序列中可以插到任意位置.也可说拓扑排序是对非线形结构的有向图进行线形化的重要手段.第35页/共
13、52页2.拓扑排序的方法由AOV网选取某个没有前驱的顶点,排到序列中,凡取出某顶点,即将它与它相关联的边从图中删掉,随着边的删除,又会有无前驱的顶点,重复如此进行,直到全部顶点都排到序列中去.例:如图P181图7.27第36页/共52页7.6关键路径AOE网(ActivityOnEdgenetwork),即边表示活动的网络,与AOV网相对应的是。它通常表示一个工程的计划或进度。AOE网是一个有向带权图,图中的:边:表示活动(子工程),边上的权:表示该活动的持续时间,即完成该活动所需要的时间;顶点:表示事件,每个事件是活动之间的转接点,即表示它的所有入边活动到此完成,所有出边活动从此开始。第37
14、页/共52页其中有两个特殊的顶点(事件),一个称做源点,它表示整个工程的开始,亦即最早活动的起点,显然它只有出边,没有入边;另一个称做汇点,它表示整个工程的结束,亦即最后活动的终点,显然它只有入边,没有出边。除这两个顶点外,其余顶点都既有入边,也有出边,是入边活动和出边活动的转接点。第38页/共52页在一个AOE网中,若包含有n个事件,通常令源点为第0个事件,汇点为第n-1个事件,其余事件的编号(即顶点序号)分别为1n-2。一个AOE网如图,该网中包含有活动和事件。如图P183图7.29一个AOV网11项9个第39页/共52页对于一个AOE网,待研究的问题是:(1)(1)整个工程至少需要多长时
15、间完成?(2)(2)哪些活动是影响工程进度的关键?第40页/共52页1事件的最早发生时间与活动的最早开始时间的关系在AOE网中,一个顶点事件的发生或出现必须在它的所有入边活动(或称前驱活动)都完成之后,即只要有一个入边活动没有完成,该事件就不可能发生。所以:一个事件的最早发生时间是它的所有入边活动,或者说最后一个入边活动刚完成的时间。一个活动的开始必须在它的起点事件发生之后,也就是说,一个顶点事件没有发生时,它的所有出边活动(或称后继活动)都不可能开始,所以:一个活动的最早开始时间是它的起点事件的最早发生时间。若用vej表示顶点vj事件的最早发生时间,用ei表示vj一条出边活动ai的最早开始时
16、间,则有ei=vej。第41页/共52页2求事件的最早发生时间 对于源点事件来说,因为它没有入边,所以随时都可以发生,整个工程的开始时间就是它的发生时间,亦即最早发生时间,通常把此时间定义为0,从此开始推出其他事件的最早发生时间。例:分析图7.29第42页/共52页3事件的最迟发生时间与活动的最迟开始时间的关系事件的最迟发生时间:在不影响整个工程按时完成的前提下,一些事件可以不在最早发生时间发生,而允许向后推迟一些时间发生,我们把最晚必须发生的时间叫做该事件的最迟发生时间。同样,在不影响整个工程按时完成的前提下,一些活动可以不在最早开始时间开始,而允许向后推迟一些时间开始,我们把最晚必须开始的
17、时间叫做该活动的最迟开始时间。AOE网中的任一个事件若在最迟发生时间仍没有发生或任一项活动在最迟开始时间仍没有开始,则必将影响整个工程的按时完成,使工期拖延。第43页/共52页4求事件的最迟发生时间dut()表示边上的权5根据AOE网中每个事件的最早发生时间和最迟发生时间计算出每个活动的最早开始时间和最迟开始时间。第44页/共52页关键路径 有些活动的开始时间余量不为0,表明这些活动不在最早开始时间开始,至多向后拖延相应的开始时间余量所规定的时间开始也不会延误整个工程的进展。如对于活动a5,它最早可以从整个工程开工后的第4天开始,至多向后拖延两天,即从第6天开始。有些活动的开始时间余量为0,表
18、明这些活动只能在最早开始时间开始,并且必须在持续时间内按时完成,否则将拖延整个工期。我们把开始时间余量为0的活动称为关键活动,由关键活动所形成的从源点到汇点的每一条路径称为关键路径。第45页/共52页 关键路径实际上就是从源点到汇点具有最长路径长度的那些路径,即最长路径。这很容易理解,因为整个工程的工期就是按照最长路径长度计算出来的,即等于该路径上所有活动的持续时间之和。当然一条路径上的活动只能串行进行,若最长路径上的任一活动不在最早开始时间开始,或不在规定的持续时间内完成,都必然会延误整个工期,所以每一项活动的开始时间余量为0,故它们都是关键活动。第46页/共52页6求出关键路径的意义可通过
19、加快关键活动(即缩短它的持续时间)来实现缩短整个工程的工期。但并不是加快任何一个关键活动都可以缩短整个工程的工期。只有加快那些包括在所有关键路径上的关键活动才能达到这个目的。第47页/共52页7.7 7.7 最短路径什么是最短路径?设一个带权的图表示一个交通运输网络,图中各顶点可以表示城市之间的交通运输线,边上的权值可表示运输线路中的各种不同信息.如:可以表示两城市之间距离,表示所用时间,表示所需的费用等等.对不同的人所关心的信息也不同,但都希望所付出的代价是最小.第48页/共52页最短路径的问题常见两种:从某源点到其余各顶点之间的最短路径 (要求)每一对顶点之间的最短路径(不要求)第49页/共52页从某源点到其余各顶点之间的最短路径注:最短路径并不一定是经过边数最少的路径1.迪杰斯特拉算法思路思路:按路径由小到大的次序逐步得到由给定源点到图的其余各顶点的最短路径.第50页/共52页第51页/共52页感谢您的观看!第52页/共52页
限制150内