- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.3 图的遍历 和树的遍历类似,我们希望从图中某顶点出发对图中每个顶点访问一次,而且只访问一次,这一过程称为图的遍历(traversing graph)。 本节介绍两种遍历图的规则:深度优先搜索和广度优先搜索。 这两种方法既适用于无向图,也适用于有向图。 7.3.1 深度优先搜索遍历 一.思路: 从图中某一点(如A)开始,先访问这一点,然后任选它的一个邻点(如V0)访问,访问完该点后,再任选这个点V0的一个邻点 ( 如 W )访问,如此向纵深方向访问。直到某个点没有其他未访问的邻点为止,则返回到前一个点。再任选它的另一个未访问过的邻点 ( 如X )继续重复上述过程的访问,直到全部点访问完为止。 二.深度优先搜索算法的文字描述: 算法中设一数组visited,表示顶点是否访问过的标志。数组长度为图的顶点数,初值均置为0,表示顶点均未被访问,当Vi被访问过,即将visitsd对应分量置为1。将该数组设为全局变量。 { 确定从G中某一顶点V0出发,访问V0; visited[V0] = 1; 找出G中V0的第一个邻接顶点-w; while (w存在) do { if visited[w] == 0 继续进行深度优先搜索; 找出G中V0的下一个邻接顶点-w;} } 三.算法函数: 深度优先搜索算法是递归算法,按照上面算法的设计思想,对于连通图和强连通图,用邻接链表作为存储结构,深度优先搜索遍历的算法设计如下: void dfs(ADJGRAPH adjg, int v) { EDGENODE *p; int i; visited[v-1] = 1; v--; printf(″%4d″, adjg.adjlist[v].vertex); p = adjg.adjlist[v].link; while(p != NULL) { if(visited[p-adjvex] == 0) dfs(adjg, (p-adjvex)+1); p = p-next;} } 深度优先搜索遍历算法 递归调用过程举例: void dfs(ADJGRAPH adjg, int v) { EDGENODE *p; int i; visited[v-1] = 1; v--; printf(″%4d″, adjg.adjlist[v].vertex); p = adjg.adjlist[v].link; while(p != NULL) { if(visited[p-adjvex] == 0) dfs(adjg, (p-adjvex)+1); p = p-next;} } 7.3.2 广度优先搜索遍历 一.思路: 从图中某一点(如A)开始,先访问这一点,然后访问这个点的所有邻接点,再分别按序从邻接点出发,依次访问它们的邻接点, 直到全部结点访问完为止, 遍历结束. 如下图的遍历:1,11,12,13, 111,112, 121, 122, 131,132 为了记住邻接点被访问的先后顺序,必须用队列保存,如队列:11,12,13。 ( 从邻接点出发的次序 按“先被访问的先出发”的原则,所以要设一辅助队列来管理邻接点出发的次序。) 图(c)遍历的结果:V1V2V3V4V5V6V7V8 或V1V3V2V6V7V4V5V8 广度优先搜索遍历中,在从邻接点出发依次访问它们的各个未被访问的邻接点时,邻接点出发的次序按“先被访问的先出发”的原则,所以要设一辅助队列来管理邻接点出发的次序. 函数的执行过程分析: void bfs(ADJGRAPH adjg, int vi) {int visited[MAXLEN]; int i, v; EDGENODE *p; LINKQUEUE que, *q; q = que; initlinkqueue(q); for (i=0; iadjg.vexnum;i++) visited [i]=0; visited [vi-1]=1; printf(″%4d″, adjlist[vi-1].vertex); 单击此处编辑母版标题样式 单击此处编辑母版副标题样式 V0 W X A V0 W X 图(a)的遍历的结果:V1V2V4V8V5V3V6V7 或V1V3V7V6V2V5
您可能关注的文档
- 第九章 机票订票系统概要设计说明书.doc
- 不良模式和效应分析程序.doc
- 电脑知识大全3幻灯片.doc
- 浅谈G.657单模光纤_附件.doc
- 第六章 C++课程设计(利智成).doc
- 第十节 景气统计分析.doc
- 第三章 2011年上海市高中学业水平考试《信息科技》试卷二.doc
- 关于降低离心水泵能耗研究.pdf
- 无法访问局域网内工作组.pdf
- 基于51单片机控制以太网通讯实现.pdf
- 江苏省泰州市泰兴市2024-2025学年四下数学期末教学质量检测模拟试题含解析.doc
- 基础教育高质量发展专题研究.docx
- 家庭财富管理培训行业发展方向及匹配能力建设研究报告.docx
- 工业用设备采购与售后维修服务合同.doc
- 英语教学课件Unit 11 Section B Writing 课件人教七下Unit11 How was yo.pptx
- 江苏省泰州市泰兴一中2025届高三下学期第一次模拟(网考)考试物理试题含解析.doc
- 汽车部件质量锦囊-全面提升生产线质量管理.pptx
- 影视制作行业拍摄风险告知合同协议.doc
- 加氢站智能运维系统行业发展方向及匹配能力建设研究报告.docx
- 江苏省泰兴中学2024年高考仿真卷物理试题含解析.doc
文档评论(0)