数据结构7课件幻灯片.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7-* 7.3 图的遍历 广度优先搜索算法 void BFS(Graph G, int V) { //初始化广度优先周游要用到的队列 using std::queue; queueint Q; //访问顶点V,并标记其标志位, V入队 G.Mark[V]= VISITED; Visit(G, V); Q.push(V); while(!Q.empty()) //如果队列仍然有元素 { int V=Q.front(); //顶部元素 Q.pop(); //出队 //将与该点相邻的每一个未访问点都入队 for(Edge e=G.FirstEdge(V); G.IsEdge(e);e=G.NextEdge(e)) { if(G.Mark[G.ToVertex(e)]== UNVISITED) {G.Mark[G.ToVertex(e)]=VISITED; Visit(G, G.ToVertex(e)); //入队 Q.push(G.ToVertex(e)); } } } } 7-* 7.3 图的遍历 广度优先搜索算法的时间复杂度 与深度优先搜索算法的时间复杂度相同 7-* 7.4 图的连通性 生成树: n 个顶点的连通网络的生成树有 n 个顶点、n-1 条边。生成树是连通图的极小连通子图。 由深度优先遍历得到的为深度优先生成树; 由广度优先遍历得到的为广度优先生成树; 一个连通图的生成树可能不唯一。 问题:对于给定的连通网络,如何求得其生成树? 对含有n个顶点的连通图G,从任一顶点出发,作一次深度优先或广度优先遍历,将遍历过程中经过的n-1条边和图中的n个顶点连接起来构成一个极小连通子图,就是图G的一棵生成树。 用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发,也可能得到不同的生成树。 7-* 7.4 图的连通性 最小生成树 生成树各边的权值总和称为生成树的权。权最小的生成树称为最小生成树。 最小生成树应用实例 假设要在n个城市之间建立通信网。令图G的顶点表示城市,边表示连接两个城市的通信线路,边的权值表示通信线路的长度或代价。在n个城市间构造通信网最少需要n-1条线路,问:如何选择这n-1条边,使得构造这个通信网总的代价最小? 构造最小生成树的准则 必须只使用该网络中的边来构造最小生成树; 必须使用且仅使用 n-1 条边来联结网络中的 n 个顶点; 不能使用产生回路的边。 7-* 7.4 图的连通性 最小生成树的构造算法 MST 性质:设 G =(V,E)是一个连通网络,U 是顶点集 V 的一个真子集。若(u,v)是 G 中所有的一个顶点在 U,另一个顶点不在 U 的边中,具有最小权值的一条边,则一定存在 G 的一棵最小生成树包括此边。 u v U V—U 7-* 7.4 图的连通性 证明(反证法): 假设 G 中任何一棵最小生成树都不包含(u,v)。 设T是一棵最小生成树但不包含(u,v)。由于T是最小生成树,所以 T 是连通的,因此有一条从u到v的路径,且该路径上必有一条连接两个顶点集 U、V-U 的边(u,v),其中u∈U,v∈V-U。当把边(u,v)加入到T中后,得到一个含有边(u,v)的回路。删除边(u,v),上述回路即被消除。由此得到另一棵生成树 T, T和T的区别仅在于用边(u,v)代替了(u,v)。由于(u,v)的权= (u,v)的权,所以, T的权= T的权,与假设矛盾。 7-* 7.4 图的连通性 普里姆(Prim)算法 基本思想: 从连通网络 N = { V, E }中的某一顶点 u0 出发,选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树的顶点集合U中。 以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把它的顶点加入到集合U中。如此继续下去,直到网络中的所有顶点都加入到生成树顶点集合U中为止。 7-* 7.4 图的连通性 在构造过程中,需引入一个辅助数组: closedge[ ]用于存放生成树外各顶点(V-U中各顶点)到生成树顶点集合内顶点(U中各顶点)的各边的当前最小权值; struct {

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档