- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 图 学习重点: 掌握图的基本概念、逻辑特征和图的存储结构。 掌握图的深度优先搜索遍历和广度优先搜索遍历的思想、遍历过程及邻接矩阵和邻接表上的实现算法。 掌握图的最小生成树的概念和求图的最小生成树的克鲁斯卡尔算法和普里姆算法的思想、求解过程和画出对应的最小生成树并求出最小生成树的权。 掌握求有向图最短路径和拓扑序列的思想和求解过程。 第7章 图 7.1 实例:求城市间最短路径 7.2 图的逻辑结构、特征 7.3 图的存储结构 7.4 图的遍历 7.5 最小生成树 7.6 应用举例 本章总结 7.1 实例:求城市间最短路径 7.1.1 问题描述 假设乘飞机旅行,想选择一条所要参观的两个城市间距离最短的路线。 7.1.2 问题的分析 如果以点代表城市,以线代表两个城市之间的距离,并在线上标出具体的距离值,可画出相应的图。通常将解决这种问题中的出发点称之为源点,则求最短路径就变成一个求从源点到终点的最短路径的问题。解决此问题时需要求出源点到其余各顶点间的最短路径才能得到最终的答案。 7.2 图的逻辑结构、特征 7.2.1 图的逻辑结构 7.2.2 图的特征 7.2.1 图的逻辑结构 图的定义: 图(Graph)由两个集合V和E组成,它的二元组定义可以表示成: Graph=(V,E) 其中, V是顶点的有穷非空集合,即V={vi | n≥1,vi∈VertexType},VertexType为顶点值的类型,它可以代表任何类型,n为顶点数; E是V上顶点间二元关系的有穷集合,称这种关系为边。 7.2.2 图的特征 7.3 图的存储结构 7.3.1 邻接矩阵 7.3.2 邻接表 7.3.3 十字链表 (略) 7.3.4 边集数组 (略) 7.3.5 邻接多重表(略) 7.3.1 邻接矩阵 邻接矩阵:表示图中顶点之间关系的矩阵。设G=(V,E)是具有n个顶点的图,顶点的顺序为(v0,v1 ,… ,vn-1),则G的邻接矩阵是n阶方阵: (1)如果G是无向图,则: (2)如果G是有向图,则: 7.3.2 邻接表 图的邻接表是一种顺序存储与链式存储相结合的方法。它对图中的每个顶点建立一个邻接关系的单链表,并把它们的表头指针用向量存储。为顶点vi建立的邻接关系的单链表称作vi的邻接表。第i个单链表中的结点表示依附于顶点vi的边。 7.4 图的遍历 7.4.1 深度优先搜索 7.4.2 广度优先搜索 7.4.1 深度优先搜索 遍历过程(递归过程): 从图中的一个顶点vi(最初为初始点)出发,先将其标记为以访问过,然后从vi的任一个未被访问的邻接点(有向图为出边邻接点)出发进行深度优先搜索遍历,当vi的所有邻接点均被访问过时,则退回到上一个顶点vk,从vk的另一个未被访问过的邻接点出发进行深度优先搜索遍历,直到退回到初始点并且没有未被访问过的邻接点为止。 7.4.2 广度优先搜索 遍历过程: 首先访问初始点vi,接着访问vi的所有未被访问过的邻接点vi1,vi2,…,vit,然后再按照vi1,vi2,…,vit的次序,访问每一个顶点的所有未被访问过的邻接点,依次类推,直到图中所有和初始点有路径相通的顶点都被访问为止。 7.5 最小生成树 7.5.1 克鲁斯卡尔算法 7.5.2 普里姆算法 7.5.1克鲁斯卡尔算法 克鲁斯卡尔算法基本思想 :将图G中边按权值的从小到大顺序依次选取;若选取的边未使生成树T形成回路,则加入到TE中;否则舍弃,直到TE中包含n-1条边为止。 如何判断选取的边与生成树中已保留的边形成回路:先使n个顶点分属于n个集合,当选取一条权值最小的边时,若它的两个端点分属于不同的集合,则表明不可能产生回路。可将这条边作为最小生成树中的边,同时将端点所在的两个集合合并为一个集合。当选取边的两个端点同属于一个集合时,说明这两个端点已连通,再选择这条边会和集合中的连通分量形成了回路,放弃此边的选择。 7.5.2 普里姆算法 普里姆算法基本思想:假设G=(V,E)是一个具有n个顶点的连通网,T=(U,TE)是G的最小生成树,U和TE的初始值均为空。则以顶点v0为初始点的构造步骤如下: l???初始化U={ v0}。v0到其它顶点的所有边为候选边; l??重复以下步骤n-1次,直到所有顶点都被加入到U中: (1) 从候选边中挑选权值最小的边输出,该边的一个端点i在U中,另一个端点j在V-U中。将该边加入到TE中,并将端点j也加入到U中,
文档评论(0)