三、遍历应用举例.PDF

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三、遍历应用举例.PDF

三、遍历应用举例 1. 求一条从顶点 i 到顶点 s 的 简单路径 2. 求两个顶点之间的一条路径 长度最短的路径 1 1. 求一条从顶点 i 到顶点 s 的简单路径 例如: 求从顶点 b 到顶 g 点 k 的一条简单路径。 b 从顶点 b 出发进行 a 深度优先搜索遍历。 假设找到的第一个 c d e f 邻接点是c,则得到的结 点访问序列为: h k b c h d a e k f g , 假设找到的第一个邻接点是a,则得到的结点 访问序列为: b a d h c e k f g 。 思考: 如何查找此路径? 遍历过程中,检查是否到终点,是则止, 否则继续。可能需进行若干次试探、回溯 2 结论: 1. 从顶点 i 到顶点 s ,若存在路径,则 从顶点 i 出发进行深度优先搜索,必能 搜索到顶点 s 。 2. 遍历过程中搜索到的顶点不一定是路 径上的顶点,则将该顶点从路径中删去, 如搜索路径为:i, … , h , v’,… , 再从h出发重 新探索下一条路经。 3. 由它出发进行的深度优先遍历整个图, 已经完成的顶点不是路径上的顶点,则说 明不存在路径(i,…,s)。 3 void DFSearch( int v, int s, char *PATH) {// 从第v个顶点出发递归地深度优先遍历图G,求得一条从v到s的简单路径,并记录在PATH 中 visited[v] = TRUE; // 访问第 v 个顶点 ,能不被重复访问 Append(PATH, getVertex(v)); // 第v个顶点加入路径 //k++ ; for (w=FirstAdjVex(G ,v); w!=0!found; w=NextAdjVex(G ,v ,w) ) { if (w==s) { found =TRUE; Append(PATH, w);exit(1) ;} //找到退出 else if (!visited[w]) DFSearch(w, s, PATH);//加入w } //end for if (!found) Delete (PATH ,v); // 从路径上删除顶点 v } // 4 7.27 求有向图G的顶点v到s是否存在长度为k的简单路径 void DFSearch( int v, int s,int k, char *PATH) { //判断邻接表方式存储的有向图G的顶点v到s是否存在长度为k的简单路径,并记录在PATH 中 if(v==sk==0) //找到了一条路径,且长度符合要求 { found=TRUE; Append(PATH, v);return ; else if(k0) { visited[v] = TRUE; // 访问第 v 个顶点 Append(PATH, getVertex(v)); L++ ; // 第v个顶点加入路径 for (w=FirstAdjVex(G,v);

文档评论(0)

zcbsj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档