- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图的遍历数据结构与算法---第二十讲北方民族大学计算机科学与工程学院王伦津 研究员20、图的遍历深度优先遍历和广度优先遍历 掌握图的深度优先和广度优先遍历的性质和方法,以及基于邻接矩阵和邻接表存储结构的递归和非递归的算法实现目 录20.1 概述20.2 深度优先遍历20.3 深度优先遍历的性质 20.4 广度优先遍历20.5 广度优先遍历的性质20、 图的遍历 从这节起,我们介绍图的一些重要操作的实现,包括遍历、拓扑排序、关键路径等。另有一些重要操作,如最短路径问题、最小生成树问题,由于主要难点在于算法,所以我们安排在后面的算法设计章节中介绍。 图的遍历与树的遍历一样具有十分重要的作用,图的许多其他操作(算法)都与遍历相关。20.1 概述 图的遍历的含意是,从图中某结点出发,按某既定方式访问图中各个可访问到的结点,使每个可访问到的结点恰被访问一次。 图的遍历方式有两种:深度优先与广度优先方式,分别对应于树的先根遍历与层序遍历。 树中不存在回路,但图中可能有回路。因此,当沿回路进行扫描时,一个结点可能被扫描到多次,可能导致死循环。为了避免这种情形,在遍历中,应为每个结点设立一个访问标志,每扫描到一个结点,要检查它的访问标志,若标志为“未访问”,则按正常方式对其进行处理(如访问或转到它的邻接点等),否则放过它,扫描下一个结点。 访问标志的设置有两种方法: ①在描述图结的记录中增设一个访问标志位。这种方法的优点是,访问“访问标志”的方法与访问结点的方法一致。如果访问标志需要与图结构同生命期,则这种方法比较合适。但是,若访问标志要重复使用,就必须先重新初始化访问标志。如果图结点的存储不利于顺序访问,这往往也是个遍历问题! ②另设一个“访问数组”,令它的每个元素对应于一个图结点访问标志。这种方法的访问标志很容易多次初始化。从图中某一结点出发,一趟只能遍历到它所在的极大连通分量中的结点,要想遍历到图中各结点,需进行多趟遍历(每趟遍历一个极大连通分量)。该过程可描述为: for (图中每个结点v) if (v尚未被访问过) 从v出发遍历该图; 下面只考虑从一点出发遍历,因此有可能会出现遍历不到的点。即那些初始点无路径可达的点,是遍历不到的。20.2 深度优先遍历 (一) 遍历规则 从图中某结点v0出发,深度优先遍历(DFS: Depth First Search)图的规则为: ·访问v0; ·对v0的各个出点v01,v02,…,v0m,每次从它们中按一定方式(也可任选)选取一个未被访问过的结点,从该结点出发按深度优先遍历方式遍历。 ?显然,因为我们没有规定对出点的遍历次序,所以,图的深度优先遍历结果一般不唯一。 12534abdc 例如,对图 20?1给出的有向图与无向图,一些遍历结果(结点访问次序)为: 左图:从1出发:1,2,4,5;或1,5,2,4 从2出发:2,1,5,4;或2,4,1,5 右图:从a出发:a,b,c,d;或a,b,d,c; … … 图20? 1一个有向图(左)和无向图(二)递归实现方法 1. 一般算法 下面考虑深度优先遍历的递归实现的一般方法(存储结构无关)。 图的深度优先遍历与二叉树的前序遍历相似。不同之处有:①二叉树每个结点至多有两个可达邻接点(左右儿子),而图的可达邻接点数目不定; ②对二叉树,沿可达邻接点搜索时不会发生回绕,但对图,若不加特别控制,就有可能回绕。 下面是图的深度优先遍历递归算法的一般性描述。如果要另设一个数组作为访问标志,则该数组要在递归过程(函数)之外初始化为“未访问”。 long DFS(图g,结点v0) { //图深度优先遍历递归算法。从结点v0出发,深度优先遍历图g,返回访问到的结点总数 int nNodes; //寄存访问到的结点数目? 访问v0; 为v0置已访问标志; nNodes=1; 求出v0的第1个可达邻接点v; while (v存在) { if (v未被访问过) nNodes=nNodes+DFS(g,v); 求出v0的下个可达邻接点v; } return nNodes; }?125341245 1 2 3 4 5 1 0 1 0 0 1 2 1 0 0 1 0 3 0 0 0 0 1 4 1 0 0 0 0 5 0 0 0 0 01 12 1 3 04 15 1 输出数组resu图 20?1有向图访问标识数组visited所示图的邻接矩阵g例如从1点深度优先遍历,先把1设置访问标志,并置入输出数组resu,然后从邻接矩阵的第一行,扫描各列,找到最近的邻接点2,将其设置访问标志,并进入输出数组,接着从邻接矩阵的2行扫描,找到第一个构成
您可能关注的文档
最近下载
- 某公司完整版审批权限表.doc VIP
- 2025浙江杭州青山湖科技城投资集团有限公司下属子公司招聘11人考试模拟试题及答案解析.docx VIP
- 马自达-马自达6阿特兹-产品使用说明书-马自达6阿特兹 2.5L蓝天尊崇版-CA7250ATE4-MAZDA6ATENZA用户手册.pdf VIP
- 泡泡玛特简介.pptx VIP
- 马勒第一交响曲(钢琴版)第3乐章.pdf VIP
- 西门子断路器3WL操作手册.pdf
- 《产业园区投建营数字化平台建设指南》.pdf VIP
- 00015 《英语(二)》高频 100 题.doc VIP
- 2024年一建管理真题完整.docx VIP
- 中医面诊知识培训课件.pptx VIP
文档评论(0)