AOV网
以顶点表示活动,以有向边表示活动之间的优先关系的有向图称为顶点表示活动的 网(Activity On Vertex Network),简称AOV网。
前驱、后继
在AOV网中,若顶点i 到顶点j之间有路径,则称顶 点i为顶点j的前驱,顶点j为 顶点i的后继;
若顶点i到顶 点j之间为一条有向边,则 称顶点i为顶点j的直接前驱, 顶点j为顶点i的直接后继。
拓扑排序
检测工程能否正常进行, 首先要判断对应的AOV网中是否存在回路,达到该目的最有效的方法之一是对AOV网构造其顶点的拓扑序列, 即对AOV网进行 拓扑排序。
设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列v1,v2,…,vn,满足若从顶点vi到vj有一条路径,则在顶点序列中顶点vi必在顶点vj之前,则称这样的顶点序列为一个拓扑序列。构造拓扑序列的过程就是拓扑排序。离散数学中,由某个集合上的一个偏序得到该集合上的一个全序的操作称为拓扑排序。
构造AOV网的一个顶点序列,使得该顶 点序列满足下列条件:
1. 若在AOV网中,顶点i 优先于顶点j,则 在该序列中顶点i 仍然优先于顶点j;
2. 若在AOV网中,顶点i与顶点j之间不存在优先关系,则在该序列中建立它们的优先 关系,即顶点i优先于顶点j,或者顶点j 优先于 顶点i;
3. 若能构造出这样的拓扑序列,则拓扑序列包含AOV网的全部顶点,说明AOV网中没有回路。
拓扑排序的方法:
1. 从AOV网中任意选择一个没有前驱的顶点(入度为0);
2. 从AOV网中去掉该顶点以及以该顶点为出发点的所有边;
3. 重复上述过程,直到AOV网中的所有顶点都被去掉,或者AOV网中还有顶点,但不存在入度为0 的顶点。前者说明AOV网中无回路, 后者说明AOV网中存在回路。
拓扑序列不一定唯一,若不存在拓扑序列,则网中有回路
自然语言描述的算法
邻接表存储
1. 首先建立一个入度为0的顶点栈,将网中所 有入度为0的顶点分别进栈。
2. 当堆栈不空时,反复执行以下动作: 从顶点栈中退出一个顶点,并输出它; 从AOV网中删去该顶点以及以它发出的所有 边,并分别将这些边的终点的入度减1;若此时边的终点的入度为0,则将该终点进栈;
3. 若输出的顶点个数少于AOV网中的顶点个数, 则报告网中存在回路,否则,说明该网中不存在回路。
深度优先遍历
若从某个顶 点v出发,遍历结束前出现了从顶点 u到顶点v的回边,则可以断定图中包 含顶点v到顶点u的回路。