数据结构 第七章 图2.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深度优先搜索遍历算法及广度优先搜索遍历算法中遍历图过程中历经边的集合和顶点集合一起构成连通图的极小连通子图。它是连通图的一颗生成树。 生成树:是一个极小连通子图,它含有图中全部顶点,但只有n-1条边。 由深度优先搜索遍历得到的生成树,称为深度优先生成树,由广度优先搜索遍历得到的生成树,称为广度优先生成树。;V0;生成森林:   若一个图是非连通图,但有若干个连通分量,则通过深度优先搜索遍历或广度优先搜索遍历,不可以得到生成树,但可以得到生成森林,且若非连通图有n个顶点,m个连通分量,则可以遍历得到m棵生成树,合起来为生成森林,森林中包含n-m条树边。   ;A; 说明: 一个图可以有许多棵不同的生成树 所有生成树具有以下共同特点: 生成树的顶点个数与图的顶点个数相同 生成树是图的极小连通子图 一个有n个顶点的连通图的生成树有n-1条边 在生成树中再加一条边必然形成回路 生成树中任意两个顶点间的路径是唯一的 含n个顶点n-1条边的图不一定是生成树;7.4.2 最小生成树;目标: 在网络的多个生成树中,寻找一个各边权值之和最小的生成树。;1、问题提出 要在n个城市间建立通信联络网,  n个城市间,最多可设置n(n-1)/2条线路;  n个城市间建立通信网,只需n-1条线路;    问题转化为:如何在可能的线路中选择n-1条,能把 所有城市(顶点)均连起来,且总耗费(各边权值之和)最小。;  希望找到一棵生成树,它的每条边上的权值之和(即建立该通信网所需花费的总代价)最小———最小生成树MST(Minimum Cost Spanning Tree);7.4.3 构造最小生成树方法(一):Prim算法;3、如此进行下去,每次往生成树里并入一个顶点和一条边,直到n-1次后,把所有n 个顶点都并入生成树G’的顶点集U中,此时U=V,T中包含有(n-1)条边; 这样, G’就是最后得到的最小生成树。    普里姆算法中每次选取的边两端,总是一个已连通顶点(在U集合内)和一个未连通顶点(在U集合外),故这个边选取后一定能将未连通顶点连通而又保证不会形成环路。;Prim方法构造过程;普里姆(Prim)算法;?有关数据的存储结构   设???两个辅助数组:   lowcost 用来保存集合V-U中各顶点与集合U中各顶点构成的边中具有最小权值的边的权值;   adjvex 用来保存依附于该边的在集合U中的顶点。 ;普里姆(Prim)算法;普里姆(Prim)算法;7.4.4 构造最小生成树方法(二):Kruskal算法;1;克鲁斯卡尔算法; 设置一个数组f[n],其初值为f[i]=i,表示各个顶点在不同的连通分量上。然后,依次取出arr数组中的每条边的两个顶点,查找它们所属的连通分量,设u1和u2为两顶点所在的树的根结点在f[]中的序号,若u1不等于u2,表明这条边的两个顶点不属于同连通一分量,则将这条边作为最小生成树的边输出,并合并它们所属的两个连通分量。 ;克鲁斯卡尔算法;7.5 最短路径;5;两种最常见的最短路径问题: 一顶点到其余各顶点的最短路径   单源点最短路径-用Dijkstra算法 任意两顶点间的最短路径   所有顶点间的最短路径-用Floyd算法;1、迪杰斯特拉(Dijkstra)算法思想   按路径长度递增次序产生最短路径算法: 把V分成两组: (1)S:已求出最短路径的顶点的集合; (2) T = V-S:尚未确定最短路径的顶点集合。 将T中顶点按最短路径递增的次序加入到S中。;   2、求最短路径步骤     采用邻接矩阵cost[N][N]来存储带权有向图。  1)令 S={V0},T={其余顶点}, T中顶点对应的距离值:若存在<V0,Vi>,为<V0,Vi>弧上的权值,若不存在<V0,Vi>,为?。  2)从T中选取一个其距离值为最小的顶点W,加入S。  3)对T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值比不加W的路径要长,则修改此距离值。  4)重复上述步骤,直到S中包含所有顶点,即S=V为止;13 <V0,V1> 8 <V0,V2> ? 30 <V0,V4> ? 32 <V0,V6> V2:8 <V0,V2>;顶点对之间的最短路径概念   所有顶点对之间的最短路径是指:对于给定的有向网G=(V,E),要对G中任意一对顶点有序对u、v(u≠v),找出u到v的最短距离。   解决此问题的一个有效方法是:轮流以每一个顶点为源点,重复执行迪杰斯特拉算法n次,即可求得每一对顶点之间的最短路径,总的时间复杂度为O(n3)。   下面将介绍用弗洛伊德(Floyd)算法来实现此功能,时间复杂度仍为O(n3

文档评论(0)

浪漫唯美-文档菜鸟 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档