数据结构 第七章图精.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构 第七章图精.ppt》由会员分享,可在线阅读,更多相关《数据结构 第七章图精.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构 第七章图第1页,本讲稿共99页2【重点掌握重点掌握】:1.1.图的两种遍历方法:遍历的定义、深度优先搜索遍历和广度优先搜图的两种遍历方法:遍历的定义、深度优先搜索遍历和广度优先搜索遍历的算法;索遍历的算法;2.2.应用图的遍历算法判断图的连通性及求图的生成树;应用图的遍历算法判断图的连通性及求图的生成树;3.3.用用PrimPrim、KruskalKruskal算法求图的最小生成树;算法求图的最小生成树;4.4.用用DijkstraDijkstra算算法法求求解解单单源源最最短短路路径径问问题题;用用FloydFloyd算算法法求求所所有有顶顶点间的最短路径问题;点间的最短路径问题;
2、5.5.利用利用AOVAOV网进行拓扑排序;利用网进行拓扑排序;利用AOEAOE网求关键路径问题;网求关键路径问题;【掌掌 握握】:1.1.掌握图的定义和术语;掌握图的定义和术语;2.2.图的各种存储结构及其构造算法、在实际问题中的求解效率。图的各种存储结构及其构造算法、在实际问题中的求解效率。第2页,本讲稿共99页37.3 7.3 图的遍历图的遍历 7.3 7.3 图的遍历:图的遍历:从图的某顶点出发,访问图中所有顶点,并且每个从图的某顶点出发,访问图中所有顶点,并且每个顶点仅访问一次。顶点仅访问一次。图结构的遍历复杂性:图结构的遍历复杂性:(1 1)在图结构中,没有一个)在图结构中,没有一
3、个“自然自然”的首结点,图中的任意一个顶的首结点,图中的任意一个顶点都可以作为第一个被访问的结点点都可以作为第一个被访问的结点(2 2)在非连通图中,从一个顶点出发,只能访问它所在的连通分量上)在非连通图中,从一个顶点出发,只能访问它所在的连通分量上的所有顶点,因此,还需考虑的所有顶点,因此,还需考虑如何选取下一个出发点如何选取下一个出发点以访问图中的以访问图中的其余连通分量其余连通分量(3 3)在图结构中,如果有回路存在,那么一个顶点被访问后,有可)在图结构中,如果有回路存在,那么一个顶点被访问后,有可能沿回路又回到该顶点,考虑能沿回路又回到该顶点,考虑如何避免重复访问如何避免重复访问(4
4、4)在图结构中,一个顶点可以和其他多个顶点邻接,当这样的顶点)在图结构中,一个顶点可以和其他多个顶点邻接,当这样的顶点访问过后,考虑访问过后,考虑如何选取下一个要访问的顶点的问题如何选取下一个要访问的顶点的问题第3页,本讲稿共99页4 图的遍历方法有深度优先遍历和广度优先遍历两种。图的遍历方法有深度优先遍历和广度优先遍历两种。7.3.1 深度优先搜索深度优先搜索方法:方法:(1 1)从图的某一顶点)从图的某一顶点V V0 0出发,访问此顶点;出发,访问此顶点;(2 2)依次从)依次从V V0 0的未被访问的邻接点出发,深度优先遍历图,直至的未被访问的邻接点出发,深度优先遍历图,直至图中所有和图
5、中所有和V V0 0相通的顶点都被访问到。相通的顶点都被访问到。若此时图中尚有顶点若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问到。过程,直至图中所有顶点都被访问到。第4页,本讲稿共99页5 V0V0 V7V7 V6V6 V5V5 V4V4 V3V3 V2V2 V1V1若图的存储结构为邻接表,则若图的存储结构为邻接表,则访问邻接点的顺序不唯一,访问邻接点的顺序不唯一,深度优先序列不是唯一的深度优先序列不是唯一的 V0V0 V1V1 V3V3 V2V2 V7V7 V6V6 V5V5 V4
6、V4 V0,V1,V3,V4,V7,V2,V5,V6,V0,V1,V3,V4,V7,V2,V5,V6,求图求图G以以V0为起点的的深度优先序列(设存储结构为邻接矩阵)为起点的的深度优先序列(设存储结构为邻接矩阵)第5页,本讲稿共99页6void DFS(Graph G,int v)/*从第从第v个顶点出发,递归地深度优先遍历图个顶点出发,递归地深度优先遍历图G*/*v是顶点在一维数组中的位置,假设是顶点在一维数组中的位置,假设G是非空图是非空图*/visitedv=1;Visit(v);/*访问第访问第v个顶点个顶点*/for(w=FirstAdjVex(G,v);w;w=NextAdjVex
7、(G,v,w)if(!visitedw)DFS(G,w);/*对对v的尚未访问的邻接顶点的尚未访问的邻接顶点w递归调用递归调用DFS*/辅助数组:辅助数组:int visitedMax_Vertex_Num;访问标志数组访问标志数组,全局变量,初始时所有分量全为全局变量,初始时所有分量全为0,visitedv=1表示顶点表示顶点v v已被访问已被访问.visited0123400000深度优先遍历算法深度优先遍历算法:7.3 7.3 图的遍历图的遍历第6页,本讲稿共99页77.3 7.3 图的遍历图的遍历在在在在邻接表邻接表邻接表邻接表存储结构上实现深度优先搜索存储结构上实现深度优先搜索存储结
8、构上实现深度优先搜索存储结构上实现深度优先搜索:void DFSTraverseAL(ALGraph G)/*深度优先遍历以邻接表存储的图深度优先遍历以邻接表存储的图G*/int i;for(i=0;iG.vexnum;+i)visitedi=0;/*标志数组初始化标志数组初始化*/for(i=0;inextarc)w=p-adjvex;/*w是是v的邻接顶点的序号的邻接顶点的序号*/if(!visitedw)DFSAL(G,w);/*若若w尚未访问尚未访问,递归调用递归调用DFS*/*DFSAL*/7.3 7.3 图的遍历图的遍历第8页,本讲稿共99页9 在遍历时,对图中每个顶点至多调用一次
9、在遍历时,对图中每个顶点至多调用一次DFSDFS函数,因为一旦某函数,因为一旦某个顶点被标志成已被访问,就不再从它出发进行搜索。因此,个顶点被标志成已被访问,就不再从它出发进行搜索。因此,遍历图的过程实质上是对每个顶点查找其邻接点的过程。其耗遍历图的过程实质上是对每个顶点查找其邻接点的过程。其耗费的时间则取决于所采用的存储结构。费的时间则取决于所采用的存储结构。用邻接矩阵做图的存储结构时,查找用邻接矩阵做图的存储结构时,查找各个各个顶点的邻接点所需的时间顶点的邻接点所需的时间为为O(n2),其中,其中n n为图中顶点数。当以邻接矩阵做存储结构时,深度为图中顶点数。当以邻接矩阵做存储结构时,深度
10、优先搜索遍历图的时间复杂度为优先搜索遍历图的时间复杂度为O(n2+n)。当以邻接表做图的存储结构时,找邻接点所需时间为当以邻接表做图的存储结构时,找邻接点所需时间为O(e),其其中中e e为无向图中边的数或有向图中弧的数。因此,当以邻接表为无向图中边的数或有向图中弧的数。因此,当以邻接表做存储结构时,深度优先搜索遍历图的时间复杂度为做存储结构时,深度优先搜索遍历图的时间复杂度为O(n+e)。7.3 7.3 图的遍历图的遍历第9页,本讲稿共99页10图中某顶点图中某顶点v v出发:出发:1 1)访问顶点)访问顶点v v;2 2)访问)访问v v的所有未被访问的邻接点的所有未被访问的邻接点w w1
11、 1,w,w2 2,w,wk k ;3 3)依次从这些邻接点出发,访问它们的所有未被访问的邻接点)依次从这些邻接点出发,访问它们的所有未被访问的邻接点;依此类推,直到图中所有访问过的顶点的邻接点都被访问;依此类推,直到图中所有访问过的顶点的邻接点都被访问;7.3.2 广度优先遍历广度优先遍历7.3 7.3 图的遍历图的遍历第10页,本讲稿共99页11 V0V0 V7V7 V6V6 V5V5 V4V4 V3V3 V2V2 V1V1 V0,V1,V2,V3,V4,V7,V5,V6 V0,V1,V2,V3,V4,V7,V5,V6 V0V0 V1V1 V3V3 V2V2 V7V7 V6V6 V5V5
12、V4V4若图的存储结构为邻接表,则若图的存储结构为邻接表,则访问邻接点的顺序不唯一,访问邻接点的顺序不唯一,深度优先序列不是唯一的深度优先序列不是唯一的求图求图G以以V0为起点的的广度优先序列(设存储结构为邻接矩阵)为起点的的广度优先序列(设存储结构为邻接矩阵)先被访问的顶点,其邻先被访问的顶点,其邻接点也要先被访问接点也要先被访问设一队列保存已访问的设一队列保存已访问的顶点顶点第11页,本讲稿共99页12Q 在邻接表存储结构上的广度优先搜索在邻接表存储结构上的广度优先搜索V0V0V1V1V2V2V3V3V4V4V7V7V5V5V6V6V1V1V2V2V3V3V0V0V4V4V7V7V5V5V
13、6V6 V0 V0 V7 V7 V6 V6 V5 V5 V4 V4 V3 V3 V2 V2 V1 V17.3 7.3 图的遍历图的遍历7012V0V2V3V1datafirstarc 0 1adjvex next3V4 3 0 5 1 1 2 7456 4V5V6V7 2 6 2 5 1 4 7 6第12页,本讲稿共99页13void BFSTraverse(MGraph G)/*从从v出发,广度优先遍历连通图出发,广度优先遍历连通图G*/*使用辅助队列使用辅助队列Q和访问标志数组和访问标志数组visited*/for(v=0;vG.vexnum;+i)visitedv=0;InitQueue
14、(Q,G.vexnum);/*初始化空的辅助队列初始化空的辅助队列Q*/for(v=0;vG.vexnum;+v)if(!visitedv)/*若若v尚未访问尚未访问*/visitedv=1;Visit(v);EnQueue(Q,v);while(!QueueEmpty_Sq(Q)DeQueue(Q,u);/*队头元素出队队头元素出队,并赋值给并赋值给u*/*访问访问u所有未被访问的邻接点所有未被访问的邻接点*/for(w=0;wG.vexnum;w+;)if(G.arcsu,w.adj&!visitedw)visitedw=1;Visit(w);EnQueue(Q,w);/*while*/*
15、BFSTraverse*/7.3 7.3 图的遍历图的遍历第13页,本讲稿共99页14第七 章 图 7.4 连通网的最小生成树连通网的最小生成树 7.4.1 生成树生成树 7.4.2 最小生成树最小生成树 7.4.3 构造最小生成树的构造最小生成树的Prim算法算法 7.4.4 构造最小生成树的构造最小生成树的Kruskal算法算法第14页,本讲稿共99页157.4.1 生成树生成树生成树:生成树:包含了无向图包含了无向图G G所有顶点的所有顶点的极小极小连通子图。连通子图。1 1)“极小极小”含义:一个有含义:一个有n n个顶点的连通图的生成树有个顶点的连通图的生成树有n-1n-1条边,条边
16、,删除任何一条边,子图不再连通;在生成树中再加一条边必删除任何一条边,子图不再连通;在生成树中再加一条边必然形成回路。(生成树包含了图中的所有顶点,但只有足以然形成回路。(生成树包含了图中的所有顶点,但只有足以构成生成树的构成生成树的n-1n-1条边)条边)2 2)一个图可以有许多棵不同的生成树;)一个图可以有许多棵不同的生成树;3 3)生成树中任意两个顶点间的路径是唯一的;)生成树中任意两个顶点间的路径是唯一的;4 4)含)含n n个顶点个顶点n-1n-1条边的图不一定是生成树。条边的图不一定是生成树。7.4 7.4 最小的生成树最小的生成树第15页,本讲稿共99页167.4 7.4 最小的
17、生成树最小的生成树 生成树的含义:生成树的含义:生成树的含义:生成树的含义:n n个顶点的图最多可存在个顶点的图最多可存在n(n-1)/2n(n-1)/2条边线路。条边线路。求生成树是为了在网络中连通求生成树是为了在网络中连通n n个顶点而选择最少的边个顶点而选择最少的边(n(n1)1)。例如:一个通信网络中,节点代表了路由器,为了使各路由例如:一个通信网络中,节点代表了路由器,为了使各路由器之间是连通的(数据可达),且不形成回路器之间是连通的(数据可达),且不形成回路(数据回到发送方数据回到发送方),则需建立该网络的生成树。,则需建立该网络的生成树。第16页,本讲稿共99页17求生成树的方法
18、:求生成树的方法:求生成树的方法:求生成树的方法:利用遍历算法。利用遍历算法。从连通图中的任一顶点出发进行遍历时,除出发点外,从连通图中的任一顶点出发进行遍历时,除出发点外,其余顶点必须通过一条边才能到达,所以遍历过程中经其余顶点必须通过一条边才能到达,所以遍历过程中经历的边有历的边有n-1n-1条,它和条,它和n n个顶点组成了连通图的一棵生成树。个顶点组成了连通图的一棵生成树。由深度优先搜索得到的是深度优先生成树;由广度优先由深度优先搜索得到的是深度优先生成树;由广度优先搜索得到的是广度优先生成树。搜索得到的是广度优先生成树。第17页,本讲稿共99页18 V0 V0 V7 V7 V6 V6
19、 V5 V5 V4 V4 V3 V3 V2 V2 V1 V1深度遍历:深度遍历:V0V1V3V4V7V2 V5V6 V0 V0 V7 V7 V6 V6 V5 V5 V4 V4 V3 V3 V2 V2 V1 V17.4 7.4 最小的生成树最小的生成树 V0 V0 V7 V7 V6 V6 V5 V5 V4 V4 V3 V3 V2 V2 V1 V1深度优先搜索生成树深度优先搜索生成树第18页,本讲稿共99页19广度遍历:广度遍历:V0 V1 V2 V3 V4 V7 V5 V6 V0 V0 V7 V7 V6 V6 V5 V5 V4 V4 V3 V3 V2 V2 V1 V1 V0 V0 V7 V7 V
20、6 V6 V5 V5 V4 V4 V3 V3 V2 V2 V1 V1广度优先搜索生成树广度优先搜索生成树7.4 7.4 最小的生成树最小的生成树 V0 V0 V7 V7 V6 V6 V5 V5 V4 V4 V3 V3 V2 V2 V1 V1第19页,本讲稿共99页207.4.2 最小生成树的概念最小生成树的概念 由生成树的定义可知,无向连通图的生成树不是惟一的。由生成树的定义可知,无向连通图的生成树不是惟一的。问题的提出:问题的提出:设要在设要在n n个城市间建立通信联络网,顶点个城市间建立通信联络网,顶点表示城表示城市,权表示城市间建立通信线路所需花费代价。希望找到一棵生成树,市,权表示城市
21、间建立通信线路所需花费代价。希望找到一棵生成树,它的每条边上的权值之和(即建立该通信网所需花费的总代价)最小它的每条边上的权值之和(即建立该通信网所需花费的总代价)最小最小代价生成树。最小代价生成树。7.4 7.4 最小的生成树最小的生成树第20页,本讲稿共99页21 最小生成树定义:最小生成树定义:对于一个网络,它的所有生成树中边权值对于一个网络,它的所有生成树中边权值最小的生成树称为最小生成树。最小的生成树称为最小生成树。问题分析:问题分析:n n个城市间建立通信网,如何在可能的线路中选择个城市间建立通信网,如何在可能的线路中选择n-1n-1条,能把所有城市(顶点)均连起来,且总耗费(各边
22、条,能把所有城市(顶点)均连起来,且总耗费(各边权值之和)最小。权值之和)最小。即:如何在保证即:如何在保证n点连通的前题下最节省点连通的前题下最节省经费经费?第21页,本讲稿共99页221.1.Prim 法基本步骤法基本步骤 设连通网络设连通网络设连通网络设连通网络G=V,E。集合。集合。集合。集合U存放存放存放存放G的最小生成树中的顶点,的最小生成树中的顶点,的最小生成树中的顶点,的最小生成树中的顶点,集合集合集合集合T存放最小生成树之外的顶点。存放最小生成树之外的顶点。存放最小生成树之外的顶点。存放最小生成树之外的顶点。(1)从从从从G中选择某一顶点中选择某一顶点中选择某一顶点中选择某一
23、顶点u u u u0 0 0 0出发,在与它关联的边中选择一个边权出发,在与它关联的边中选择一个边权出发,在与它关联的边中选择一个边权出发,在与它关联的边中选择一个边权最小的边最小的边最小的边最小的边(u(u(u(u0 0 0 0,v);,v);,v);,v);将顶点将顶点将顶点将顶点v v v v加入最小生成树的加入最小生成树的加入最小生成树的加入最小生成树的顶点集合顶点集合顶点集合顶点集合U U U U,在,在,在,在集集集集合合合合T T T T 中删除该顶点;中删除该顶点;中删除该顶点;中删除该顶点;(2)用顶点用顶点用顶点用顶点v v v v到集合到集合到集合到集合T T T T中顶
24、点的边权中顶点的边权中顶点的边权中顶点的边权“更新更新更新更新”原集合原集合原集合原集合U U U U中顶点到中顶点到中顶点到中顶点到集合集合集合集合T T T T中顶点的最小边权;中顶点的最小边权;中顶点的最小边权;中顶点的最小边权;(3)从一个顶点在从一个顶点在从一个顶点在从一个顶点在U中,而另一个顶点在中,而另一个顶点在中,而另一个顶点在中,而另一个顶点在T T T T中的各条边中选择权值最中的各条边中选择权值最中的各条边中选择权值最中的各条边中选择权值最小的边小的边小的边小的边(u,v),把顶点把顶点把顶点把顶点v v v v加入到加入到加入到加入到集合集合集合集合U U U U 中。
25、中。中。中。(4)重复重复重复重复(2)、(3),直到网络中的所有顶点都加入到生成树顶点集合,直到网络中的所有顶点都加入到生成树顶点集合,直到网络中的所有顶点都加入到生成树顶点集合,直到网络中的所有顶点都加入到生成树顶点集合U中为止。中为止。中为止。中为止。7.4.3 构造最小生成树的构造最小生成树的PrimPrim算法算法7.4 7.4 最小的生成树最小的生成树第22页,本讲稿共99页23V3V3V1V1V4V4V6V6V5V5V2V2651U=V1 V3V3V1V1V4V4V6V6V5V5V2V251654V3V3V4V4V6V6V5V5V2V21V1V1U=V1,V3 U=V1,V3 V
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第七章图精 第七 章图精
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内