- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数 据 结 构 Data Structure 主讲人: 刘 玮 第七章 图 7.1 图的定义和术语 7.2 图的存储结构 7.2 图的存储结构 7.2 图的存储结构 7.2 图的存储结构 7.2 图的存储结构 7.2 图的存储结构 7.3 图的遍历 7.3 图的遍历 深度优先遍历算法 7.3 图的遍历 广度优先遍历算法 7.4 最小生成树 7.6 最短路径 7.6 最短路径 本章小结 理解图的类型定义; 熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则; 熟练掌握图的两种遍历算法; 了解各种图的应用问题算法; 采用队列的结构 。 图的各种应用问题的算法都比较经典,注意理解各种图的算法及其应用场合。 如何理解极小连通子图?N条边,多一条成回路,少一条则不连通。 所有顶点均由边连接在一起,但不存在回路的图称为生成树。 生成树 对于连通图,调用BFS所经过的边的集合和图的全部顶点构成了图的极小连通子图,即连通图的一棵广度优先生成树。 对于非连通图,每个连通分量的顶点集和所经过的边一起构成了若干棵生成树,这些连通分量的生成树构成非连通图的生成森林。 对于连通图,调用DFS所经过的边的集合和图的全部顶点构成了图的极小连通子图,即连通图的一棵深度优先生成树。 深度遍历: V1 V2 V4 V5 V8 V3 V6 V7 V1 V2 V3 V4 V8 V5 V6 V7 深度优先生成树 广度遍历: V1 V2 V3 V4 V8 V5 V6 V7 广度优先生成树 V1 V2 V3 V4 V5 V6 V7 V8 深度优先遍历: ALMJBFC DE GKHI 7.4.2 最小生成树 用一个连通网表示n个居民点和各个居民点之间可能架设的通讯线路,网中边上的权值表示架设这条线路所需经费。 问题描述 在n个居民点间构建通讯网只需架设n-1条线路,则工程队面临的问题是架设哪几条线路能使总的工程费用最低? 问题等价于:在含有n个顶点的连通网中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称这棵连通子图为连通网的最小生成树。 类似此类的问题很多。 基本思想 ① 普里姆 (Prim)算法 具体做法 首先选取图中任意一个顶点v作为生成树的根,之后继续往生成树中添加顶点w,则在顶点w和顶点v之间必须有边,且该边上的权值应在所有和v相邻的边中属最小。 初始令U={u0},(u0∈V),TE= ; 在所有u∈U, v∈V-U的边(u,v)∈E中,找一条代价最小的边(u0,v0); 将(u0,v0)并入集合TE,同时v0并入U); 重复上述操作直至U=V为止,则T=(V,{TE})为最小生成树。 cost={(A,B)34,(F,C)25,(F,D)25,(F,E)26} cost={(A,B)34,(C,D)17,(F,E)26} cost={(A,B)34,(F,E)26} cost={(B,E)12} 数组lowcost[n]:用来保存集合V-U中各顶点与集合U中顶点最短边的权值,lowcost[v]=0表示顶点v已加入最小生成树中; 数组adjvex[n]:用来保存依附于该边(集合V-U中各顶点与集合U中顶点的最短边)在集合U中的顶点。 lowcost[i]=w 表示顶点vi和顶点vk之间的权值为w adjvex[i]=k 其中:vi∈V-U且vk ∈U Prim算法描述: 初始化两个辅助数组lowcost和adjvex; 输出顶点u0,将顶点u0加入集合U中; 重复执行下列操作n-1次 3.1 在lowcost中选取最短边,取adjvex中对应的顶点序号k; 3.2 输出顶点k和对应的权值; 3.3 将顶点k加入集合U中; 3.4 调整数组lowcost和adjvex。 基本思想 ② 克鲁斯卡尔(Kruskal)算法 具体做法 为使生成树上总的权值之和达到最小,则应使每一条边上的权值尽可能地小,自然应从权值最小的边选起,直至选出n-1条互不构成回路的权值最小边为止。 初始状态为只有n个顶点而无边的非连通图T=(V,{ }),每个顶点自成一个连通分量; 在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边,选取下一条代价最小的边; 依此类推,直至T中所有顶点都在同一连通分量上为止。 连通分量: {A} {B} {C} {D} {E} {F} {A} {B,E} {C} {D} {F} {A} {B,E} {C,D} {F} {A,F} {B,E} {C,D} {A,F,C,D} {B,E} {A,
文档评论(0)