- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
17.1图的定义7.2图的存储表示7.3图的遍历7.4最小生成树7.7两点之间的最短路径问题7.5拓扑排序7.6关键路径第七章图
27.3图的遍历和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程叫做图的遍历。为保证图中的各顶点在遍历过程中访问且仅访问一次,我们为图中顶点设置一个访问标志数组visited[n],用于标示图中每个顶点是否被访问过,其初始值为0(“假”),表示顶点均未被访问;一旦访问过顶点vi,则置访问标志数组中的visited[i]为1(“真”),表示该顶点已被访问。
37.3.1深度优先搜索深度优先搜索(Depth_FirstSearch)是指按照深度方向搜索,它类似于树的先根遍历,是树的先根遍历的推广,其基本思想如下:从图中某个顶点v0出发,首先访问v0。依次从v0的未被访问的邻接点出发深度优先遍历图,直到图中所有和v0有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至所有顶点都被访问到为止。
4下图给出了一个深度优先搜索的过程图示,其中实箭头代表访问方向,虚箭头代表回溯方向,箭头旁边的数字代表搜索顺序,A为起始顶点。ADGBEHCFI(1)(2)(4)(6)(8)(7)(14)(10)(13)(12)(11)(3)(5)(15)(9)(16)
5#defineTRUE1#defineFALSE0#defineERROR-1/*出错*/#defineOK1intvisited[MAX_VERTEX_NUM];/*访问标志数组*/voidTraverseGraph(Graphg){/*对图g进行深度优先搜索,Graph表示图的一种存储结构,如数组表示法或邻接表等*/for(vi=0;vig.vexnum;vi++)visited[vi]=FALSE;/*访问标志数组初始化*/for(vi=0;vig.vexnum;vi++)/*调用深度遍历连通子图的操作*/if(!visited[vi])DepthFirstSearch(g,vi);}/*TraverseGraph*/
6#defineTRUE1#defineFALSE0#defineERROR-1/*出错*/#defineOK1intvisited[MAX_VERTEX_NUM];/*访问标志数组*/voidTraverseGraph(Graphg){/*对图g进行深度优先搜索,Graph表示图的一种存储结构,如数组表示法或邻接表等*/for(vi=0;vig.vexnum;vi++)visited[vi]=FALSE;/*访问标志数组初始化*/for(vi=0;vig.vexnum;vi++)/*调用深度遍历连通子图的操作*/if(!visited[vi])DepthFirstSearch(g,vi);}/*TraverseGraph*/
7voidDepthFirstSearch(Graphg,intv0){/*深度遍历v0所在的连通子图*/visit(v0);visited[v0]=TRUE;/*访问顶点v0,并置访问标志数组相应分量值*/for(w=FirstAdjVex(g,v0);w=0;w=NextAdjVex(g,v0,w))/*邻接点存在*/if(!visited[w])DepthFirstSearch(g,w);/*递归调用DepthFirstSearch*/}/*DepthFirstSearch*/
8(1)用邻接矩阵方式实现深度优先搜索voidDepthFirstSearch(AdjMatrixg,intv0){/*图g为邻接矩阵类型AdjMatrix*/visit(v0);visited[v0]=TRUE;for(vj=0;vjn;vj++)if(!visited[vj]g.arcs[v0][vj].adj==1)DepthFirstSearch(g,vj);}/*Dep
文档评论(0)