第九章-图的遍历算法课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第九章-图的遍历算法课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 遍历 算法 课件
- 资源描述:
-
1、第三部分第三部分 最先割技术最先割技术 第九章第九章 图的遍历图的遍历 第九章第九章 图的遍历图的遍历 9 91 1 引言引言 9 92 2 深度优先搜索深度优先搜索 9 93 3 深度优先搜索的应用深度优先搜索的应用 9 94 4 广度优先搜索广度优先搜索 9 95 5 广度优先搜索的应用广度优先搜索的应用 在一些诸如找出最短路径和最小生成树的图在一些诸如找出最短路径和最小生成树的图的算法中,用由它们相应的算法顺序访问顶点的算法中,用由它们相应的算法顺序访问顶点和边。然而,在一些其他算法中,访问顶点的和边。然而,在一些其他算法中,访问顶点的顺序是不重要的,重要的是,不管输入的图如顺序是不重要
2、的,重要的是,不管输入的图如何,用一种系统的顺序来访问顶点。在本章中,何,用一种系统的顺序来访问顶点。在本章中,我们讨论图遍历的两种方法:深度优先搜索和我们讨论图遍历的两种方法:深度优先搜索和广度优先搜索。广度优先搜索。9.1 引引 言言 设设G=(V,E)是一个是一个有向或无向图有向或无向图,G的深度优的深度优先搜索运作如下:先搜索运作如下:1、初始化所有的顶点访问标志为未访问;、初始化所有的顶点访问标志为未访问;2、任意选择一个起始顶点,比如说、任意选择一个起始顶点,比如说sV,并,并标上已访问。标上已访问。3、从、从s的邻接顶点中选择任意一个顶点的邻接顶点中选择任意一个顶点w,访,访问该
3、顶点,同时将其标志为被访问。问该顶点,同时将其标志为被访问。9.2 深度优先搜索深度优先搜索 3、将访问指针移至将访问指针移至w结点,将其标志为被结点,将其标志为被访问,然后从访问,然后从w的临接结点中选择一个未被访的临接结点中选择一个未被访问的结点,向前继续访问;问的结点,向前继续访问;4、在访问过程中,按照上述的深度优先的方、在访问过程中,按照上述的深度优先的方式向前推进,一旦发现某一个顶点式向前推进,一旦发现某一个顶点X的所有邻的所有邻接点都被标志为已访问,访问指针回退至上一接点都被标志为已访问,访问指针回退至上一层,继续访问该层没有被访问的其他的子节点。层,继续访问该层没有被访问的其他
4、的子节点。5、如此往复,直至回退到根节点为止。、如此往复,直至回退到根节点为止。算法算法9.1 DFSInput:有向或无向图有向或无向图G=(V,E)。Output:在相应的深度优先搜索树中对顶点的前序在相应的深度优先搜索树中对顶点的前序和后序。和后序。1.predfn 0;postdfn 0 2.For 每个顶点每个顶点vV 3.标记标记v未访问未访问 /初始化访问标志初始化访问标志 4.End for 5.For 每个顶点每个顶点vV 6.If v未访问未访问 then dfs(v)/调用访问调用访问 7.End for过程过程 dfs(v)/递归访问递归访问 1.标记标记v已访问已访问
5、 2.predfn predfn+1/进来访问,是前序号进来访问,是前序号 3.For 每条边每条边(v,w)E 4.If w标记为未访问标记为未访问 then dfs(w)5.End for 6.postdfn postdfn+1/结点被访问完毕,退结点被访问完毕,退回时访问该语句,即后序号回时访问该语句,即后序号 算法生成结构:算法生成结构:1、树(全部顶点相连,能够一次到达);、树(全部顶点相连,能够一次到达);2、森林(顶点不相连,不能够一次都到达)。、森林(顶点不相连,不能够一次都到达)。1、无向图的情况分析、无向图的情况分析设设G=(V,E)是无向图,作为遍历的结果,是无向图,作为
6、遍历的结果,G的边的边分成一下两种类型。分成一下两种类型。树边树边:深度优先搜索树中的边,如果在搜索边:深度优先搜索树中的边,如果在搜索边(v,w)时,时,w是首次被访问,则边是首次被访问,则边(v,w)是树边。是树边。回边回边:所有其它的边。:所有其它的边。例例9.1。e ed dc cb bf fa ah hg gi ij ja ab bc cd de ef fg gh hi ij j1,101,102,92,93,33,34,24,25,15,16,86,87,77,78,68,69,59,510,410,42、有向图的情况、有向图的情况 有向图中的深度优先搜索导致结果:有向图中的深度优
7、先搜索导致结果:一个或多个一个或多个(有向有向)生成树,生成树,树的多少取决于树的多少取决于初始点初始点。(1)选择某起始点)选择某起始点v,深度优先搜索一棵树,深度优先搜索一棵树,它由从它由从v出发所有可到达的顶点组成。出发所有可到达的顶点组成。(2)没有遍历完所有的顶点,选择另一个顶)没有遍历完所有的顶点,选择另一个顶点点w继续(继续(未访问过顶点),构建一颗从未访问过顶点),构建一颗从w可到达可到达的所有未访问顶点组成的树,这个过程继续下去的所有未访问顶点组成的树,这个过程继续下去直到所有的顶点都被访问过。直到所有的顶点都被访问过。(3)重复上述过程,直至所有顶点被访问完)重复上述过程,
8、直至所有顶点被访问完毕。毕。G的边分成的边分成4种类型:种类型:1、树边、树边:深度优先搜索树中的边。如果在搜索边:深度优先搜索树中的边。如果在搜索边(v,w)时,时,w是第一次被访问是第一次被访问,则,则(v,w)是树边。是树边。2、回边、回边:在迄今为止构建的深度优先搜索树中,:在迄今为止构建的深度优先搜索树中,w是是v的祖先,并且当搜索的祖先,并且当搜索(v,w)时顶点时顶点w已被标上已被标上已访问,这样形成的边已访问,这样形成的边(v,w)是回边。是回边。3、前向边、前向边:在迄今为止构建的深度优先搜索树中,:在迄今为止构建的深度优先搜索树中,w是是v的后裔,并且当搜索的后裔,并且当搜
9、索(v,w)时顶点时顶点w被标上已被标上已访问,这种形式的边访问,这种形式的边(v,w)是前向边。是前向边。3、横跨边、横跨边:所有其它的边。:所有其它的边。见例见例9.2。c cd de eb ba af fa ab be ef fc cd da af fe eb bc cd d1,41,42,32,33,13,14,24,25,65,66,56,51,41,42,22,23,13,14,34,35,65,66,56,5 (1)顶点顶点v被访问标记为访问的过程,每一个顶被访问标记为访问的过程,每一个顶点的调用耗费是点的调用耗费是(1)。一共需要。一共需要n个顶点,所以该个顶点,所以该过程的总
10、耗费是过程的总耗费是(n)。(2)算法的步骤)算法的步骤1和步骤和步骤3分别耗费分别耗费(1)和和(n)时间。时间。/初始化序列号、访问标志初始化序列号、访问标志(3)步骤)步骤6测试一个顶点是否已标记要耗费测试一个顶点是否已标记要耗费(n)。(注意:测试方法是要依次搜索该点的邻接(注意:测试方法是要依次搜索该点的邻接点,看是否从某个点访问过它,所以是点,看是否从某个点访问过它,所以是(n))9.2.1 深度优先搜索的时间复杂性深度优先搜索的时间复杂性 (4 4)测试顶点)测试顶点w是否是否标记为未访问,这一步标记为未访问,这一步的执行次数等于的执行次数等于顶点顶点v v的邻接点数的邻接点数。
11、这一步执行的总次数,在有向图的情况下等这一步执行的总次数,在有向图的情况下等于它的边数,在无向图的情况下是边数的两倍。于它的边数,在无向图的情况下是边数的两倍。于是,不论是有向图还是无向图,这一步的于是,不论是有向图还是无向图,这一步的耗费是耗费是(m),(5)算法的总运行时间是:)算法的总运行时间是:(m+n)。如果图。如果图是连通的或有是连通的或有mn,则运行时间简单地为则运行时间简单地为(m)。但。但是必须强调的是,图假设是用邻接表表示的。是必须强调的是,图假设是用邻接表表示的。9.3 深度优先搜索的应用深度优先搜索的应用 深度优先搜索在图和几何算法中用得很普遍。深度优先搜索在图和几何算
12、法中用得很普遍。在本节中,我们列举它的一些重要应用。在本节中,我们列举它的一些重要应用。设设G=(V,E)是一个有是一个有n个顶点和个顶点和m条边的有向或条边的有向或无向图。为了测试无向图。为了测试G是否至少有一个回路,我们是否至少有一个回路,我们对对G用深度优先搜索,用深度优先搜索,如果在搜索过程中探测到如果在搜索过程中探测到一条回边,那么一条回边,那么G是有回路的,否则是有回路的,否则G是无回路的。是无回路的。注意注意G可能不连通,如果可能不连通,如果G是连通无向图,是连通无向图,那么不需要对图进行遍历,那么不需要对图进行遍历,因为因为G是无回路的当是无回路的当且仅当它是一棵树,则当且仅当
13、且仅当它是一棵树,则当且仅当m=n-1。9.3.1 图的无回路性图的无回路性 给出一个有向无回路图给出一个有向无回路图(dag)G=(V,E),拓扑排,拓扑排序问题是找出图顶点的一个线性序列,序问题是找出图顶点的一个线性序列,使得如果使得如果(v,w)E,那么在这个序中,那么在这个序中v在在w前出现。前出现。例如,在图例如,在图9.3(a)中所示的有向无回路图中,中所示的有向无回路图中,顶点的一个可能的拓扑排序是顶点的一个可能的拓扑排序是a,b,d,c,e,f,g。我们将假设在这种有向无回路图中有一个入度我们将假设在这种有向无回路图中有一个入度是是0的唯一的顶点的唯一的顶点s,如果不是的话,我
14、们可以简,如果不是的话,我们可以简单地添一个新的顶点单地添一个新的顶点s,然后让,然后让s到所有入度为到所有入度为0的的点加上边。点加上边。9.3.2 拓扑排序拓扑排序a ab bd df fc ce eg gs s 接下来,我们从顶点接下来,我们从顶点s起,简单地对图起,简单地对图G执行执行深度优先搜索。深度优先搜索。当遍历完成时,计数器当遍历完成时,计数器postdfn定义了一个在定义了一个在有向无回路图中顶点的反扑排序,于是,为了得有向无回路图中顶点的反扑排序,于是,为了得到这个拓扑序,可以在算法到这个拓扑序,可以在算法DFS中在计数器中在计数器postdfn刚好被增加后,加上一个输出步
15、,把输出刚好被增加后,加上一个输出步,把输出结果翻转过来就是我们需要的拓扑序。结果翻转过来就是我们需要的拓扑序。关节点关节点:在多于两个顶点的无向图在多于两个顶点的无向图G中,存在一个顶点中,存在一个顶点v,如果有不同于如果有不同于v的两个顶点的两个顶点u和和w,在,在u和和w间的间的任何路径都必定经过顶点任何路径都必定经过顶点v。这样,如果这样,如果G是连通的,移去是连通的,移去v和与它关联的边,和与它关联的边,将产生将产生G的非连通子图(森林)。一个图如果是的非连通子图(森林)。一个图如果是连通的并且没有关节点则称为是连通的并且没有关节点则称为是双连通双连通的。的。9.3.3 寻找图的关节
16、点寻找图的关节点由深度优先生成树的特性可以得到如下结论:由深度优先生成树的特性可以得到如下结论:1、根是一个关节点根是一个关节点当且仅当在深度优先搜索树中,当且仅当在深度优先搜索树中,它有两个或更多的儿子;它有两个或更多的儿子;原因:图中不存在连接不同子树顶点的边,删掉根原因:图中不存在连接不同子树顶点的边,删掉根结点后,生成树就变成了森林。结点后,生成树就变成了森林。2、根以外的其他结点根以外的其他结点V,如果其某棵子树的根和,如果其某棵子树的根和子树中的其他结点均没有指向该结点子树中的其他结点均没有指向该结点v的祖先的的祖先的回边。回边。或者:或者:根以外的顶点根以外的顶点v是一个关节点当
展开阅读全文