AOV网
1、定义
用顶点表示活动,用有向边<Vi, Vj>表示活动间的优先关系。
Vi必须先于活动Vj进行。
这种有向图叫做顶点表示活动的AOV网络(Activity On Vertices)


2、拓扑排序
拓扑序列:即将各个顶点(代表各个活动)排列成一个线性有序的序列,使得所有弧尾结点排在弧头结点的前面。
这种构造AOV网络全部顶点的拓扑有序序列的运算叫做拓扑排序。
如果通过拓扑排序能将AOV网络的所有顶点都排入一个拓扑有序的序列中,则一定没有有向环。
上图的拓扑排序为:
C1,C8,C2,C3,C5,C9,C4,C7,C6
拓扑排序方法:
(1)输入AOV网络。令n为顶点个数;
(2)在AOV网络中选一个没有直接前驱的顶点,并输出之;
(3)从图中删去该顶点,同时删去所有它发出的有向边;
(4)重复以上(2)(3)步,直到
全部顶点均已输出,拓扑有序序列形成,拓扑排序完成;
或
图中还有未输出的顶点,但已跳出处理循环。说明图中还剩下一些顶点,它们都有直接前驱,这是网络中必有环。


如果图采用邻接表储存,则在邻接表中增设一个数组count[],记录各顶点入度。入度为0的顶点即无前驱顶点。
在输入数据前,顶点表data[]和入度数组count[]全部初始化。
在输入数据时,每输入一条边<j, k >,就需要建立一个边结点,并将它链入相应边链表中,统计入度信息:
EdgeNode *p = new EdgeNode;
p->adjvex = k;
p->nextarc = G.VexList[j].firstarc;
data[j].firstarc = p;
count[k]++;

在算法中,使用一个存放入度为0的顶点的链式栈,供选择和输出无前驱的顶点。
算法描述:
建立入度为0的顶点栈;
当入度为0的顶点栈不为空时,重复执行
从顶点栈中推出一个顶点,并输出之;
从AOV网络中删去这个顶点和它发出的边,边的总顶点入度减一;
如果边的终顶点入度减至0,则该顶点进入入度为0的顶点栈;
如果输出顶点个数少于AOV网络的顶点个数,则报告网络中存在有向环。
算法分析:
如果AOV网络中有n个顶点,e条边,在拓扑排序的过程中,搜索入度为0的顶点,建立链式栈所需要的时间是O(n)。在正常的情况下,有向图有n个顶点,每个顶点进入一次栈,出一次栈,共输出n次。顶点入度减一的运算共执行了e次。所以总的时间复杂度为O(n+e).
AOV网的更多相关文章
- 算法与数据结构(八) AOV网的关键路径
上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的, ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- 算法与数据结构(八) AOV网的关键路径(Swift版)
上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的, ...
- 算法与数据结构(七) AOV网的拓扑排序(Swift版)
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- AOV网与拓扑排序
在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex Network).AOV网中的弧表示活动 ...
- AOE网与AOV网
因为有人无端怀疑此博客为抄袭, 且作者写作此博客时仅为应试之用,今毕业已久此文章已无用处 故删除文章,不想再无故受到打扰 祝好
- AOV网的实现(数据结构)
#include <stdio.h> #include <stdlib.h> #include <string.h>//我这里的头以及尾巴与书上的不一样. int ...
- 数据结构关于AOV与AOE网的区别
AOV网,顶点表示活动,弧表示活动间的优先关系的有向图. 即如果a->b,那么a是b的先决条件. AOE网,边表示活动,是一个带权的有向无环图, 其中顶点表示事件,弧表示活动,权表示活动持续时间 ...
随机推荐
- windows server 2008系统VPN服务配置
转自:http://www.softxp.net/article/win2008-vpn/,,仅作自己的笔记用 Windows sever 2008 R2的NPS(network policy ser ...
- 最全js 放大镜效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS函数调用
function SayHello(word) { console.log(word); } function execute(Somefunction,value) { Somefunc ...
- CodeForces 670A Holidays
简单题. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #inclu ...
- git上传报错的解决方案
刚创建的github版本库,在push代码时出错:$ git push -u origin masterTo git@github.com:******/Demo.git ! [rejected] m ...
- Hive 执行计划
执行语句 hive> explain select s.id, s.name from student s left outer join student_tmp st on s.name = ...
- 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版
一.前言 多条件查询分页以及排序 每个系统里都会有这个的代码 做好这块 可以大大提高开发效率 所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...
- HashMap按键排序和按值排序
对map集合进行排序 今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单 ...
- C# 中获取时区列表
c#中获取时区列表 下面方法获得的仅仅用来显示和使用,无法用来进行时间转换. public static List<DisplayTimeZone> GetSystemTimeZones( ...
- ubuntu配置LAMP
1.安装Apache sudo apt-get install apache2 如果显示未找到软件则执行sudo apt-get update(建议使用ubuntu正在支持的系统版本,不在支持的版本可 ...