图安工大计算机学院862拓扑排序.PPT

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图安工大计算机学院862拓扑排序

2、对于下图所示的有向图,试利用Dijkstra算法求源点1到其他各顶点的最短路径,可参考教材P207图8.29中的表格形式给出计算过程。   数据结构 第八章 --图 安工大计算机学院 第8章 图 本章中介绍下列主要内容: 图的定义 图的存储结构 图的遍历操作 图的几个典型问题 8.6 有向无环图及应用 8.6.1 AOV网 8.6.2 拓扑排序 8.6.3 关键路径 8.6.1 AOV网 基本概念: AOV网:如果用图中的顶点表示活动,边表示活动间的先后关系,则这样的有向图称为顶点活动网(Activity On Vertex network,简称AOV网) AOV网中的弧表示活动之间存在的制约关系 例子: 计算机专业的学生必须完成一系列规定的基础课和专业课才能毕业,这时工程就是完成给定的学习计划,而活动就是学习课程,这些课程的名称与代号如表所示 在AOV网中,用顶点表示课程,有向边表示课程之间的优先关系,如果课程Ci是课程Cj的先修课,则在AOV网中必定存在一条有向边Ci, Cj。表中各课程的AOV网如下图所示 8.6.2 拓扑排序 对于一个AOV网,其所有顶点可以排成一个线性序列vi1,vi2,…,vin,该线性序列具有以下性质∶如果在AOV网中,从顶点vi到顶点vj存在一条路径,则在线性序列中,顶点vi一定排在顶点vj之前。具有这种性质的线性序列称为拓扑序列,构造拓扑序列的操作称为拓扑排序 例:对下图中的AOV网进行拓扑排序 得到的一个拓扑序列:C0, C1, C2, C4, C3, C5, C7, C8, C6; 另外一个拓扑序列C0, C7, C8, C1, C4, C2, C3, C6, C5 如果一个学生一学期只能选修一门课,则他必须按照某一个拓扑序列的次序学习,才能保证学习任何一门课时,其先修课程已学过。 注意: 1、一个AOV网的拓扑序列不一定是唯一的。 2、假设AOV网代表一个工程,如果条件限制只能串行工作,则AOV网某一拓扑序列就是整个工程得以顺利完成的一种可行方案。 AOV网中一定不能出现回路(因为出现回路意味着,某些活动的开工是以自己工作的完成作为先决条件,这种现象称为死锁). 如图所示的AOV网,就无法把顶点排成满足拓扑序列条件的线性序列。 任何无回路的AOV网,其顶点都可以排成一个拓扑序列,方法如下: 从AOV网中选择一个入度为0的顶点将其输出。 在AOV网中删除此顶点及其所有的出边。 反复执行以上两步,直到所有顶点都已经输出为止,此时整个拓扑排序完成;或者直到剩下的顶点的入度都不为0为止,此时说明AOV网中存在回路,拓扑排序无法再进行。 ①.顶点C0和C1的入度为0,可以任选一个输出,选择C0,将C0及其所有的出边删除,得到的图如图8.21(b)所示。 ②.这时,图中入度为0的顶点是C1和C7,选择C1输出,并删除C1和它的所有出边,得到的图如图8.21(c)所示。 (a) 初态 (b)输出C0后 (c) 输出C1后 ③.依此类推,依次选择C2, C3, C4, C5, C7, C8, C6输出,每次输出并删除所有出边后的图如图8.21的(d),(e),(f),(g),(h),(i)所示。 最后得到的拓扑序列为C0, C1, C2, C3, C4, C5, C7, C8, C6。 (d) 输出C2后 (e) 输出C3后 (f) 输出C4后 (g) 输出C5后 (h) 输出C7后 (i) 输出C8后 拓扑排序算法: 设AOV网采用邻接表表示,边表为出边表。算法中定义一个indegrVe数组,存放各顶点的入度。设置一个链栈存储入度为0的顶点。拓扑排序前,先得到所有结点的入度,然后将所有入度为0的顶点压栈。从栈顶取出一个顶点将其输出,由它的出边表可以得到以该顶点为起点的出边,将这些边终点的入度减1,即删除这些边。如果某条边终点的入度为0,则将该顶点入栈。反复进行上述操作,直到栈为空,如果这时输出的顶点个数小于n,则说明该AOV网中存在回路,否则,拓扑排序正常结束。算法结束后,拓扑序列存放在变量ptopo中。 具体实现时,链栈可以利用顶点表中值为0的indegrVe字段实现 例子:AOV网的邻接表表示如图所示。按上述算法进行拓扑排序 C 0 C 1 C 2 2 2 5 7 ∧ 3 6 ∧ C 3 C 4 C 5 C 6 ∧ ∧ C 7 8 ∧ 4 ∧ 3 ∧ 5 ∧ 0 0 2 2 1 2 2 1 C 8 6 ∧ 1 拓扑序列为∶C1

文档评论(0)

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

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

1亿VIP精品文档

相关文档