- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图的遍历 广优 4.3.2、广度优先遍历 访问顶点v后,接着依次访问v的所有邻接顶点,再依次访问这些邻接顶点的邻接顶点。直到所有的顶点都被访问过。 1 2 5 8 4 6 3 7 1 2 3 4 5 6 7 8 注意:8是作为哪个顶点的邻接顶点被访问的? 1 2 3 4 5 6 7 8 体会队列操作方式: 图的遍历 广优 广度优先遍历的特点 能否遍历到所有的结点? “广度”:总是在访问了一个顶点后,依次访问它的所有相邻顶点。然后再从它的第一个相邻顶点开始,访问其所有的相邻顶点。如此逐个顶点地逐步扩散,直到所有的顶点都被访问。 算法如何结束? 广度优先遍历操作具有队列操作的特点,当从队列中取出最后一个顶点,发现该顶点的所有相邻顶点都被访问过时,意味着图中所有的顶点都已被访问过 图的遍历 广优 算法实现分析 (1)需要纪录结点访问状态。 int visited[顶点号] ; 数组 (2)需要队列辅助操作 lqueue_type queue; (3)图采用邻接表存储方式 graph_l graph; (5)算法框架 (4)核心算法 图的遍历 广优 (4)算法框架 利用队列,不断将顶点出队、入队,直到所有的顶点都被访问过 当队列为空时,算法结束 算法框架 第一个顶点入队 while( !empty(queue)){ 核心算法; (即顶点出队,被访问,入队的过程) } 图的遍历 广优 (5)核心算法 1、从队列中取出一个顶点 2、逐个访问该顶点的邻接顶点 3、未被访问过的邻接顶点依次入队 4、当顶点的所有邻接顶点都访问过后,回到1 v = dequeue( queue ); p = graph.node_list[v]; adjp = p-next_adj; while(adjp != NULL){ adjp = adjp-next_adj;} if( visited[adjp-node_index] != true){ v = adjp-node_index; visit( v ), visited[ v ] = true; inqueue(queue, v);} initialize visited[ ] , create_queue(queue); visit( v ), visited[ v ] = true; inqueue(queue, v ); while(!empty(queue)){ while( adjp != NULL){ if( visited [ adjp-node_index] != true){ v = adjp-node_index; visit(v), visited[v] = true; inqueue( queu, v); } adjp = adjp-next;} void bfs(graph , v ){ } } v = dequeue( queue); p = graph-node_list[ v ]; adjp = p-next_adj; 生成树与图 4.4 生成树与最短路径 4.4.1 生成树 假设存在这样一颗树: 树结点的集合与图的顶点集合相等 树的分支全部由图的边组成。 称这颗树是这幅图的生成树 生成树是图的: 子集/子图 是一个不包含回路的子图 图的生成树是 2 1 4 3 2 1 4 3 2 1 4 3 2 1 4 3 不唯一的! 唯一的! 权值 生成树与图 4.4.2 最小费用生成树 在图所有生成树中,边的权值总和最小的生成树 1 2 4 5 6 3 6 5 3 6 6 4 2 4 1 6 1 2 4 5 6 3 边 1-3 1 4-6 2 2-5 3 1-4 4 3-6 4 2-3 5 1-2 6 3-5 6 5-6 6 将边按权值大小排列 生成树与图 算法分析 关键技术: 为什么在(1,4)边选中后不能选(3,6)边--回路 在选择(3,6)边和(2,3)边时有什么不同,怎样设置条件以区别? 当时3和6位于同一图中,2、5和3位于不同的图中 1 2 4 5 6 3 6 5 3 6 6 4 2 4 1 6 1 2 4 5 6 3 1-4 4 3-6 4 2-3 5 生成树与图 1 2 4 5 6 3 …… 1)开始时所有的节点都位于不同的图中 2)选择一条连接两个不同子图的最短边 3)连接以后两个子图的所有顶点都要改为 在一个子图中 4)当所有的顶点都位于一个子图中, 算法结束。 权值 边 1-3 1 4-6 2 2-5 3 1-
文档评论(0)