- 1、本文档共64页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.7 图的应用 【例6-5】河南省地级市组成的地图遍历。 要求:利用图的邻接表表示法来存储河南省各地级市和公路信息,利用深度优先遍历来对每个城市进行遍历。 实现:找出城市之间最省钱的路。 知识点:图的存储结构及建立算法、图的深度优先和广度优先遍历算法。 * * * 2.基本实现思想: (1)访问顶点v; (2)从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历; (3)重复上述两步,直至图中所有和v有路径相通的顶点都被访问到。 如图6-19所示访问路线。 以图6-20的无向图为例,进行图的深度优先有哪些信誉好的足球投注网站。假设从顶点v1出发进行有哪些信誉好的足球投注网站,在访问了顶点v1之后,选择邻接点v2。因为v2未曾访问,则从v2出发进行有哪些信誉好的足球投注网站。依次类推,接着从v4 、v8 、v5 出发进行有哪些信誉好的足球投注网站。在访问了v5之后,由于v5的邻接点都已被访问,则有哪些信誉好的足球投注网站回到 v8。由于同样的理由,有哪些信誉好的足球投注网站继续回到v4,v2直至v1,此时由于v1的另一个邻接点未被访问,则有哪些信誉好的足球投注网站又从v1到v3,再继续进行下去由此,得到深度优先遍历的顶点访问序列为: v1 →v2 →v4→v8→ v5 →v3→v6→v7 显然,这是一个递归的过程。为了在遍历过程中便于区分顶点是否已被访问,需附设访问标志数组visited[0:n-1], ,其初值为FALSE ,一旦某个顶点被访问,则其相应的分量置为TRUE。 6.3.1 深度优先遍历 操作步骤:递归实现 (1)访问顶点i;visited[i]= True;//算法执行前visited[n]= FALSE (2)w=顶点v的第一个邻接点; (3)while(w存在) if(w未被访问) 从顶点w出发递归执行该算法; w=顶点v的下一个邻接点; 从图的某一点v出发,递归地进行深度优先遍历的过程算法: void DFS(Graph G,int i)/*从第i个顶点出发递归的深度遍历图*/ { int w; visited[i]=True; /*访问第i个顶点*/ printf(%d-,i); for(w=First_AdjVex(G,i); w; w=Next_AdjVex(G,i,w)) if(!visited[w]) DFS(G,w); /*对尚未访问的邻接顶点w调用DFS*/ } 6.3.1 深度优先遍历 以邻接表为存储结构的整个图进行深度优先遍历实现的C语言描述: void DFS_Traverse(Graph G)/*深度优先遍历图*/ { int i; printf(深度优先遍历:); for(i=1;i=G.vexnum;i++) visited[i]=False; /*访问标志数组初始化*/ for(i=1;i=G.vexnum;i++) if(!visited[i]) DFS(G,i); /*对尚未访问的顶点调用DFS*/ printf(\b\b \n); } 6.3.2 广度优先有哪些信誉好的足球投注网站 广度优先有哪些信誉好的足球投注网站(Breadth_First Search) 遍历类似于树的按层次遍历的过程。 假设从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过和邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 广度优先有哪些信誉好的足球投注网站遍历图的过程中以v为起始点,由近至远,依次访问和v有路径相通且路径长度为1,2,…的顶点。如图6-21所示访问路线示意图。 例如,对图6-20所示无向图进行广度优先有哪些信誉好的足球投注网站遍历,首先访问v1 和v1的邻接点v2和v3,然后依次访问v2 的邻接点v4 和v5 及v3 的邻接点v6和v7,最后访问v4 的邻接点v8。由于这些顶点的邻接点均已被访问,并且图中所有顶点都被访问,由些完成了图的遍历。得到的顶点访问序列为: v1→v2 →v3 →v4→ v5→ v6→ v7 →v8 6.3.2 广度优先有哪些信誉好的足球投注网站 操作步骤:非递归实现 (1)初始化队列Q;visited[n]= False; (2)访问顶点i;visited[i]= True;顶点i入队列Q; (3) while(队列Q非空) u=队列Q的对头元素出队; w=顶点u的第一个邻接点; while(w存在) 如果w未访问,则访问顶点w;
文档评论(0)