教学课件 数据结构-陈越.ppt

  1. 1、本文档共300页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 图 §6.6.2 每一对顶点之间的最短路径 ?每一对顶点之间的最短路径( All-Pairs Shortest Path)问题: ? 重复执行迪杰斯特拉(Dijkstra)算法|V|次。这样,便可求得每一对顶点的最短路径。总的执行时间为O(|V|3)。 ? 弗洛伊德(Floyd)提出的另一个算法。这个算法的时间复杂度也是O(|V|3),但形式上非常简洁优雅,而且对于比较稠密的图,实际运行效率更快。 [例6.17] 给出一个有向网及其邻接矩阵A。用Floyd算法求该有向网中每对顶点之间的最短路径长度及其最短路径。 给定带权有向图(或无向图)G=(V,E),求任意两个顶点(vi, vj) 之间的最短路径(vi,vj ∈V)。 A v0 v1 v2 0 4 11 6 0 2 3 ∞ 0 v0 v1 v2 v0 v1 v2 2 11 3 6 4 7/24 第6章 图 §6.6.2 Floyd算法求最短路径 D(-1) v0 v1 v2 0 4 11 6 0 2 3 ∞ 0 v0 v1 v2 D(0) v0 v1 v2 0 4 11 6 0 2 3 7 0 v0 v1 v2 v0 v1 v2 0 4 11 6 0 2 3 ∞ 0 v0 v1 v2 D(0) v0 v1 v2 0 4 11 6 0 2 3 7 0 v0 v1 v2 D(1) v0 v1 v2 0 4 6 6 0 2 3 7 0 v0 v1 v2 v0 v1 v2 0 4 11 6 0 2 3 7 0 v0 v1 v2 8/24 第6章 图 §6.6.2 Floyd算法求最短路径 D(1) v0 v1 v2 0 4 6 6 0 2 3 7 0 v0 v1 v2 D(2) v0 v1 v2 0 4 6 5 0 2 3 7 0 v0 v1 v2 v0 v1 v2 0 4 6 6 0 2 3 7 0 v0 v1 v2 ? P(-1)[i][j] = i的含义是:从vi到vj的最短路径中,vj的前驱结点为vi ? P(0)[2][1] = 0的含义是:从v2到v1的最短路径中,v0为中间顶点:v2v0v1 9/24 第6章 图 §6.7 拓扑排序 ? “有向无环图”(Directed Acyclic Graph,DAG) 拓扑排序是指有向无环图中各顶点构成的有序序列。该序列满足如下条件:如果图中一顶点vi到另一顶点vj存在一条路径,那么vj在此图的拓扑排序序列中位于vi之后。 C11 C12 C6 C5 C1 C2 C7 C8 C3 C4 C9 C10 课程编号 课程名称 先修课程 C1 程序设计基础 无 C2 离散数学 无 C3 数据结构 C1,C2 C4 高等数学1 无 C5 高等数学2 C4 C6 线性代数 C5 C7 汇编语言 C3,C6 C8 数据库 C3 C9 操作系统 C7 C10 计算机组成原理 C7 C11 编译原理 C10 C12 计算机网络 C7 【例】某大学计算机专业部分必修的课程以及修学这些课程的先后顺序关系。 ?下列两种顶点序列都是该DAG的拓扑排序: ? C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 ? C4, C1, C2, C3, C5, C6, C7, C8, C9, C10, C12, C11 10/24 第6章 图 §6.7 拓扑排序 求出给定DAG的一个拓扑序列,相当于进行一个作业调度。 如何来求一个拓扑序列呢? 简单算法: [step 1] 如果找得到任何一个入度为0的顶点v,则step 2,否则step 4; [step 2] 输出顶点v,并从图中删除该顶点以及与其相连的所有边; [step 3] 对改变后的图重复这一过程,转step 1; [step 4] 如果已经输出全部顶点,则结束;否则该有向图不是DAG。 void ToplogicalSort ( Graph G, int TopNum[ ] ) { int Counter; /* 拓扑序号 */ int v, w; int *InDegree =

文档评论(0)

喜宝 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档