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

  • 9
  • 0
  • 约小于1千字
  • 约 14页
  • 2017-05-25 发布于湖北
  • 举报
吉林大学数据结构_拓扑排序

拓扑排序;;所谓拓扑序列,就是把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)

1亿VIP精品文档

相关文档