对于给定的AOV网络,必须先判断是否存在有向环。

检测有向环是对AOV网络构造它的拓扑有序序列,即将各个顶点排列成一个线性有序的序列,使得AOV网络中所有直接前驱和直接后继关系都能得到满足。

这种构造AOV网络全部顶点的拓扑有序序列的运算叫做拓扑排序,为了实现拓扑排序,需要增加数组count[]记录各个顶点的入度,并组织一个栈S组织所有入度为0的顶点。每当访问一个顶点并删除与它相关联的边时,这些边的另一端点入度减1,入度减至0的结点入栈。

为了建立入度为0的顶点栈,可以不另外分配存储空间,直接利用入度为0的顶点的count[]数组元素。

设立栈顶指针top,指示当前栈顶(某一个入度为0的顶点)的位置。栈初始化位置为-1,表示空栈。非空栈的栈顶指向次栈顶一直往下指向栈底再指向-1。

如果AOV网络n顶点e边。搜索入度为0的结点建立链式栈所需时间为O(n)。n个顶点各进栈、出栈、输出一次,(如果n次循环完成前就栈空,说明网络中有回路)。顶点入度减1的运算执行了e次,所以总时间复杂度为O(n+e)。

template <class T,class E>
void TopologicalSort(Graph<T,E>& G){int i,j,w,v;int top=-1;   int n=G.NumberOfVerticles();int *count=new int[n];    //入度数组兼入度为0顶点栈for(i=0;i<n;i++) count[i]=0;cin>>i>>j;    //输入一条从i到j的边while(i>-1 && i<n && j>-1 && j<n){G.insertEdge(i,j);count[j]++;   //j的入度加1cin>>i>>j;}for(i=0;i<n;i++)if(count[i]==0){count[i]=top;    //原栈顶元素放在count[i]中top=i;    //top指向新栈顶
        }for(i=0;i<n;i++)    //n个结点各出栈一次、输出一次if(top==-1){        //中途栈空,网络中有回路cout<<"网络中有回路!"<<endl;return;}else {v=top;           //位于栈顶顶顶点位置记为vtop=count[top];  //top退到次栈顶cout<<G.getValue(v)<<""<<endl;w=G.GetFirstNeighbor(v);while(w!=-1){if(--count[w]==0){     //当邻顶点入度为0时count[w]=top;top=w;  //进栈
                }w=G.GetNextNeighbor(v,w);}}
}

转载于:https://www.cnblogs.com/yangyuliufeng/p/9294951.html

算法-图(3)用顶点表示活动的网络(AOV网络)Activity On Vertex NetWork相关推荐

  1. 图算法入门3:活动网络-AOV网络和拓扑排序

    AOV网络 通常一个工程可以分成若干个子工程,这些子工程被称为活动(activity),完成这些活动,整个工程就完成了.给一个简单的例子,如下图,大学专业课程存在依赖关系,对于一些课程必须选修其他课程 ...

  2. 活动网络——AOV网络

    一般一个工程可以分成若干个子工程,这些子工程称为活动.实际上,可以用有向图来表示一个工程,用有向边<u,v>表示活动u必须先于活动v完成.这种有向图叫做顶点表示活动的网络,记作AOV网络( ...

  3. 图论算法—图的拓扑排序介绍和Kahn算法原理解析以及Java代码的实现

    详细介绍了图的拓扑排序的概念,然后介绍了求拓扑序列的算法:Kahn算法的原理,最后提供了基于邻接矩阵和邻接表的图对该算法的Java实现. 阅读本文需要一定的图的基础,如果对于图不是太明白的可以看看这篇 ...

  4. 图算法入门4:活动网络-AOE网络和关键路径(critical path)

    AOE网络的基本概念 上一节介绍了活动网络AOV网络的相关内容,这一节将进一步介绍另一种活动网络AOE网络.如果对于有向无环图(DAG),用有向边表示一个工程的各项活动(activity),边上的权值 ...

  5. 图的拓扑排序(AOV网络)

    文章目录 拓扑排序 概念 实现 邻接表(队列) 邻接矩阵(栈) 总结 源代码 邻接表 邻接矩阵 拓扑排序 概念 拓扑排序是对有向无环图的顶点的一种排序. AOV网络 : 在有向图中, 用顶点表示活动或 ...

  6. 下图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示活动,边的权重表示活动的持续时间,则里程碑(7)在关键路径上,活动GH的松弛时间是(8)。...

    2014年下半年 网络工程师 上午试卷 综合知识   下图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示活动,边的权重表示活动的持续时间,则里程碑(7)在关键路径上,活动GH的松弛时 ...

  7. 【活动图】下图是一个软件项目的活动图,其中顶点表示项目里程碑,链接顶点的便表示包含的活动,边上的数字表示完成该活动所需的天数。求关键路径长度。

    1. 下图是一个软件项目的活动图,其中顶点表示项目里程碑,链接顶点的便表示包含的活动,边上的数字表示完成该活动所需的天数.则关键路径长度为____,若在实际项目进展中,在其他活动都能正常进行的前提下, ...

  8. 【王卓】数据结构与算法图(九)

    ✍.目录脑图 目录 ✍.目录脑图 1.图 1.1.图的定义 1.2.图的术语 1.3.图的存储结构 1.3.1.邻接矩阵(数组)表示法 1.3.1.1.无向图的邻接矩阵表示法 1.3.1.2.有向图的 ...

  9. java 迪杰斯特拉_Java 实现Dikstra迪杰斯特拉算法 关于单源顶点最短路径问题的求解...

    Dijkstra算法是按照路径长度递增的方法计算某一点到其余各顶点的最短路径.其算法的基本思想是:把图中所有顶点分成两组,第一组包括已确定最短路径的顶点(初始只包括源点v0),第二组包括尚未确定最短路 ...

  10. 计算机基础知识数据结构与算法,(计算机基础知识)[数据结构与算法] 图

    第六章 图 6.1 图的定义和基本术语 图: G=(V,E) Graph = (Vertex, Edge) V: 顶点(数据元素)的有穷非空集合 E: 边的有穷集合 完全图: 任意两个点都有一条边相连 ...

最新文章

  1. julia有 pytorch包吗_有了Julia语言,深度学习框架从此不需要计算图
  2. javascript模块化、模块加载器初探
  3. 科大星云诗社动态20201129
  4. 如何使用yum来下载RPM包而不进行安装
  5. [Poi2011]Tree Rotations线段树合并
  6. 企业注册一站式服务平台公司宝App挂牌新三板
  7. 算法导论第三版习题及答案
  8. SI4463模块技术研究(结束)
  9. 对产品经理来说,在求职的时候,PMP和NPDP两个证书,哪一个权威性比较高,含金量比较大?
  10. 周志明虚拟机最新版,大厂面试必备宝典
  11. 医学研究人员为什么要学习R语言?哪本书最适合学习?
  12. Python3.6安装 pip安装 BeautifulSoup安装
  13. 如何撰写商业计划书?
  14. theos的makefile写法
  15. IEEE CEC benchmarks概述
  16. MSDN Library for Visual Studio 2008 SP1 下载
  17. 后端开发实践——Spring Boot项目模板
  18. 巴菲特再捐36亿美元,还说:赚钱的脑袋很重要
  19. [javascript]禁止复制
  20. php过滤提交数据 防止sql注入攻击

热门文章

  1. 2022 CCF国际AIOps挑战赛决赛暨AIOps研讨会成功举办
  2. 永中office linux卸载,永中office2012forLinux的安装卸载
  3. html写出日出,有关描写日出的优美段落
  4. kali开机密码破解
  5. i5处理器学计算机怎么设置,处理器怎么超频 酷睿i3/i5/i7系列CPU超频详细教程 (全文)...
  6. 利用Python3中turtle的绘制超立方体。
  7. 注册商标流程需要材料
  8. Ubuntu下键盘测试软件
  9. 最细致全面架设单机传奇教程
  10. NNDL 实验六 卷积神经网络(4)ResNet18实现MNIST