吉林大学数据结构_拓扑排序.pptx

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

拓扑排序;;所谓拓扑序列,就是把AOV网中的所有顶点排成一个线性序列,该序列满足如下条件:若AOV网中存在边Vi, Vj ,则在该序列中,Vi必位于Vj之前。 构造AOV网的拓扑序列的操作被称为拓扑排序。;?;?;对于任何无回路的AOV网,其顶点均可排成拓扑序列,并且其拓扑序列未必唯一。;拓扑排序算法的基本步骤是: 1)从网中选择一个入度为0的顶点且输出之; 2)从网中删除该顶点及其所有出边; 3)执行(1)(2),直至所有顶点已输出,或网中剩余顶点入度均不为0(说明网中存在回路,无法继续拓扑排序。因此拓扑排序算法可用来判断有向图是否存在回路)。 ;我们假定AOV网用邻接表的形式存储。为实现拓扑排序算法,事先需做好两项准备工作: 1)建立一个数组count[ ],count[i]的元素值取对应顶点i的入度; 2)建立一个堆栈,栈中存放入度为0的顶点,当一个顶点的入度为0,就将其压入栈。 ;事实上,我们可以不为该顶点栈另外分配存储空间,而是直接利用入度为0的顶点的count[ ]数组元素的值来模拟堆栈的压入和弹出。;(1)设置一个“栈顶指针”top,以指示当前“栈顶”位置(这里的“栈”是模拟的,实际并不存在真正的堆栈); (2)初始化“栈”时,top值设为-1,表示“栈”空,对应如下语句: top = -1 ; (3)当顶点i的入度为0,应该进“栈”时,将“栈顶指针”所指的顶点序号放在count[i]中,并更新“栈顶指针”top,令其指向顶点i : count[i] = top ; top = i ; (4)当应该从“栈”中弹出一个顶点时,把原“栈顶”位置记录下来,top退到“次栈顶”。 j = top ; top = count[top] ; ;入度为0的顶点均要被压入“栈”,故每一次“弹出”的顶点(top所指向的顶点)入度都是0,显然,顶点的被弹出次序实际是“栈顶”指针top的变化次序,也就是拓扑排序时顶点的输出次序。 如果“栈顶指针”top值变成-1,而顶点却未被全部输出,说明网中有回路,此时算法强制终止拓扑排序。;?;?;?

文档评论(0)

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

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

1亿VIP精品文档

相关文档