【 拓扑排序】

文章目录

  • 拓扑排序
    • AOV-网
    • 拓扑排序的方法
    • 拓扑排序的一个重要应用:
    • 拓扑排序的算法

拓扑排序

AOV-网

无环的有向图称作有向无环图。
这种用顶点表示活动,用弧表示活动间的优先关系的有向图称为以顶点为活动的网(Activity On Vertex Network),简称AOV-网。
在网中,若从顶点vi到vj有一条有向路径,则vi是vj的前驱,vj是vi的后继。若是网中的一条,则vi是vj的直接前驱,vj是vi的直接后继。
在AOV-网中,不应该出现环。【 拓扑排序】_第1张图片
例如,这里的c1是c5的前驱,c5是c1的后继。
c1是c2的直接前驱,c2是c1的直接后继。

拓扑排序的方法

  • 在有向图中选一个没有前驱的顶点且输出之。
  • 从图中删除该顶点和没有以他为尾的弧。
  • 重复上述步骤,直至全部顶点均已输出;或者当图中不存在无前驱结点的顶点为止。
    【 拓扑排序】_第2张图片
    一个AOV网的拓扑排序不是唯一的。
    比如,将c1去掉后,后面可以选择的顶点有c2,c4,c9。

拓扑排序的一个重要应用:

检测AOV网中是否存在环的方法:
对有向图构造其顶点的拓扑有序序列,若网上所有的顶点都在拓扑有序序列中,则该AOV图必定不存在环。

拓扑排序的算法

算法步骤:
①求出各顶点的入度并存在数组indegree[i]中,使入度为0的顶点入栈。
②只要栈不空,则重复以下操作:

  • 使栈顶顶点vi出栈,并保存在拓扑序列数组topo中;
  • 对顶点vi的每个邻接点vk的入度减1,如果vk的入度变为0,则使vk入栈。
    ③如果出现顶点个数少于AOV-网的顶点个数,则网中存在有向环,无法进行拓扑排序,否则拓扑排序成功。

【 拓扑排序】_第3张图片
【 拓扑排序】_第4张图片

你可能感兴趣的:(数据结构)