- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章 图 - 西南林业大学网络教学平台.ppt
第七章 图 7.1 图的定义和基本术语 7.2 图的存储结构 7.2.1数组表示法 7.2.2邻接表 7.2.3十字链表 7.2.4邻接多重表 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径 第七章 图 图(Graph)是较线性表和树更为复杂的结构。 图中任意数据两个元素之间都可能相关。 7.1 图的定义和基本术语 7.2 图的存储结构 7.2.1 数组表示法 数组表示法(邻接矩阵) 无向图、有向图、网均适用;易求各顶点的度。 例如有向图G1和无向图G2的邻接矩阵为 网及其邻接矩阵 7.2.2 邻接表(链式存储结构) 邻接表的链式存储结构示意图 7.3 图的遍历 图的遍历:从图的某顶点出发,访问所有顶点,且每个顶点仅被访问一次。 两种遍历图的路径: 深度优先搜索和广度优先搜索 它们对无向图和有向图都适用 深度优先搜索类似于树的先根遍历 广度优先搜索类似于树的层次遍历 7.3.1 深度优先搜索 深度优先搜索算法 7.3.2 广度优先搜索 广度优先搜索算法 7.5 有向无环图及其应用(略讲) 一个无环的有向图叫做有向无环图,简称DAG图 有向无环图是描述含有公共子式的表达式的有效工具: 有向无环图也是描述一项工程或系统的进行过程的有效工具: 7.5.1 拓扑排序 顶点——活动 弧 ——活动间的优先关系 AOV-网(Activity On Vertex Network):不应该出现有向环 7.5.2 关键路径 关键路径(从源点到汇点):路径长度最长的路径 例:完成整项工程至少需要多少时间? 哪些活动是影响整个工程进度的关键? 7.6 最短路径 7.6.1 从某个源点到其余各顶点的最短路径 给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径 例:求v0到其余顶点的最短路径 迪杰斯特拉(Dijkstra)算法 (1)设置两个顶点的集合T和S; 集合S存放已找到最短路径的顶点 集合T存放当前还未找到最短路径的顶点 (2)初始状态时,S只包含源点v0 ; (3)从T中选取某个顶点vi(要求vi 到v0的路径长度最短) 加入到S中,; (4)S中每加入一个顶点vi,都要修改顶点v0到T中剩余顶点 的最短路径长度值; 它们的值为原来值与新值中较小者; 新值是vi的最短路径长度值加上vi到该顶点的路径长度 (5)不断重复(3)和(4),直到S包含全部顶点。 7.6.2 每一对顶点间的最短路径 给定带权有向图G,求G中每个顶点到其余各顶点的最短路径 解决此问题的一个有效方法是:轮流以每一个顶点为源点,重复执行迪杰斯特拉算法n次,即可求得每一对顶点之间的最短路径,总的时间复杂度为O(n3)。 下面将介绍用弗洛伊德(Floyd)算法来实现此功能,时间复杂度仍为O(n3),但该方法比调用n次迪杰斯特拉方法更直观一些。 Floyd算法 (1)递推产生一个矩阵序列A0,A1,...,Ak,...An 其中Ak[i,j]表示从顶点vi到vj的路径上所经过的顶点序号不大于k的最短路径长度 (2)初始时, A0为邻接矩阵. (3)Ak+1[i,j]=min{Ak[i,j], Ak[i,k+1]+Ak[k+1,j]} (0=k=n-1) 需要引入辅助数组 sets[ ] (1)初始化:图 G 中的n 个顶点,构成n 个连通分量,顶点xi 对应的连通分量用集合i 表示,所以 sets[ i ]=i, 即表示第 i 个顶点在集合 i 中。 (2)依次取出E 中的边(按边权值递增顺序),设取出的边为( xi, xj )。 (3)判断:若sets[ i ]= sets[ j ] , 则表示xi 和 xj 在同一集合中,返回(2);否则,转到(4)。 (4)将边 ( xi, xj )并入T,同时将xj 所在的集合v (与xj 连通的顶点)并入xi 所在的集合 u (与xi 连通的顶点),即:由v=sets[j]和u =sets[i] ,扫描辅助数组 sets[ ] ,若 sets[k]=v, 则 令 sets[k]=u 。返回(2)。 (5)重复(2)、(3)、(4),取出n-1条边。 0 1 2 3 4 5 0 1 2 3 4 5 下标 sets 0 1 2 3 4 5 V2 V0 V3 V5 V4 V1 3 6 5 2 1 6 5 5
文档评论(0)