一、AOV网(Activity On Vertex Network)

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,称为AOV网。

不能存在回路。

拓扑序列

设G(V,E)是一个具有n个顶点的有向图,V中的顶点序列满足若从顶点v~i~到v~j~有一条路径,则在顶点序列中v~i~必须在v~j~之前,称这样的一个顶点为拓扑序列。

二、拓扑排序算法

基本思路

从AOV网中选择一个入度为0的顶点输出,然后删去此顶点,并删除以此顶点为尾的弧,继续重复此步骤,直到输出全部顶点或者AOV网中不存在入度为0的点为止。

AOV网要一直删除顶点,所以用邻接表表示图比较合适。考虑到算法中要查找入度为0的点,所以在原顶点结点中增加一个入度域即可。

代码如下:

    //拓扑排序private static boolean TopologicalSort(){EdgeNode edgeNode = new EdgeNode();int i,k;int gettop = 0;int top = 0;          //栈指针下标int count = 0;        //输出顶点的个数Stack<Integer> stack = new Stack<>();for(i = 0; i < adjList.verNum; i++){if(adjList.vertexNodes[i].in == 0) {stack.push(i);}}while (! stack.empty()){gettop = stack.pop();System.out.print(adjList.vertexNodes[gettop].data+" -> ");count++;for(edgeNode = adjList.vertexNodes[gettop].firstEdge; edgeNode != null; edgeNode = edgeNode.next){k = edgeNode.adjvex;if(--adjList.vertexNodes[k].in == 0)stack.push(k);}}return count >= adjList.verNum;}

三、AOE网

在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,称为AOE网(Activity On Edge Network)。

关键路径

路径上各个活动所持续的时间之和称为路径长度,从源点到汇点具有最大长度的路径叫关键路径,在关键路径上的活动叫关键活动。

  • 在工程活动中,耗费的时间取决于关键路径的长度;
  • 拓扑排序解决了一个工程能否顺利进行的问题,关键路径解决了工程完成所需的最短时间问题。

算法基本思想

找到所有活动的最早开始时间和最晚开始时间,比较它们,如果相等就意味着此活动是关键活动,活动间的路径是关键路径,反之则不是。

代码如下:

 //求关键路径private static void CriticalPath(){ltv = new int[adjList.verNum];EdgeNode edgeNode = new EdgeNode();int i,gettop,j;int k = 0;int ete=0;int lte = 0;    //最早发生时间和最迟发生时间if(TopologicalSort()) {for (i = 0; i < adjList.verNum; i++) {ltv[i] = etv[adjList.verNum - 1];}while (!stack2.empty()) {gettop = stack2.pop();for (edgeNode = adjList.vertexNodes[gettop].firstEdge; edgeNode != null; edgeNode = edgeNode.next) {k = edgeNode.adjvex;if (ltv[k] - edgeNode.weight < ltv[gettop]) {ltv[gettop] = ltv[k] - edgeNode.weight;}}}for (j = 0; j < adjList.verNum; j++) {for (edgeNode = adjList.vertexNodes[j].firstEdge; edgeNode != null; edgeNode = edgeNode.next) {k = edgeNode.adjvex;ete = etv[j];lte = ltv[k] - edgeNode.weight;if (ete == lte) {System.out.printf("<v%d, v%d> length: %d \n ", j,k, edgeNode.weight);}}}}}//拓扑排序private static boolean TopologicalSort(){etv = new int[adjList.verNum];EdgeNode edgeNode = new EdgeNode();int i,k;int gettop = 0;int count = 0;        //输出顶点的个数Stack<Integer> stack = new Stack<>();for(i = 0; i < adjList.verNum; i++){if(adjList.vertexNodes[i].in == 0) {stack.push(i);}}for (i = 0; i < adjList.verNum; i++){etv[i] = 0;}System.out.println("拓扑序列为:");while (! stack.empty()){gettop = stack.pop();System.out.print(adjList.vertexNodes[gettop].data+" -> ");count++;stack2.push(gettop);           //   拓扑序列压栈for(edgeNode = adjList.vertexNodes[gettop].firstEdge; edgeNode != null; edgeNode = edgeNode.next){k = edgeNode.adjvex;if(--adjList.vertexNodes[k].in == 0)stack.push(k);if(etv[gettop]+edgeNode.weight > etv[k]){                //求各顶点最早发生时间etv[k] = etv[gettop] + edgeNode.weight;}}}System.out.println();return count >= adjList.verNum;}

时间复杂度为O(n+e),e为边数。

本文用到的代码链接

拓扑排序与关键路径(AOV网和AOE网)相关推荐

  1. 算法笔记_图算法专题_关键路径 AOV网和AOE网

    关键路径 1.基本概念 1.AOV网:顶点活动网,是指用顶点表示活动,而用边集表示活动优先关系的有向无环图. 2.AOE网:边活动网,是指用带权的边集表示活动,而用顶点表示事件的有向无环图. AOV网 ...

  2. 拓扑排序和关键路径课程设计

    目录 1.    设计任务书... 3 1.1设计任务... 3 1.2程序功能... 3 1.3运行环境... 3 2.    本组课题... 3 2.1课题... 3 2.2本人任务... 3 3 ...

  3. C语言数据结构与算法---拓扑排序、关键路径

    文章目录 一. 有向无环图 二. 拓扑排序 1. 分析 2. 拓扑排序的定义及方法 3. 拓扑排序的重要应用 4. 拓扑排序的算法实现 三. 关键路径 1.分析 2. 什么是关键路径 3. 关键路径的 ...

  4. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  5. 图的应用(AOV网、AOE网、图连通性)

    图的应用(AOV网.AOE网.图连通性): AOV网: 在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,称这样的有向图为顶点表示活动的网,简称AOV网. AOV网特点: 1.AO ...

  6. 【算法】 AOV网与AOE网

    AOV网 我们把施工过程.生产流程.软件开发.教学安排等都当成一个项目工程来对待,所有的工程都可以分为若干个"活动"的子工程.有很多场景对顺序有严格的要求,比如说建造一栋大楼必须先 ...

  7. 考研复习之数据结构笔记(十二)图(下)(图的应用,包含最小生成树、最短路径、拓扑排序、关键路径以及单元小结)

    目录 一.图的应用 1.1 最小生成树 (1)基本概念与问题引入 (2)Prim(普里姆)算法 (3)Kruskal(克鲁斯卡尔)算法 1.2 最短路径 (1)基本概念与问题引入 (2)Dijkstr ...

  8. 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法

    大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...

  9. 超详细讲解实现拓扑排序、关键路径

    今天,小编带着大家来学习图中非常重要的一环,拓扑排序和关键路径! 目录 一. 绪论--实际应用 二. 拓扑排序 (一).含义 (二).实现原理 (三).代码实现 三. 关键路径 (一).含义 (二). ...

最新文章

  1. 李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪
  2. Intel汇编语言程序设计学习-第六章 条件处理-下
  3. mysql 隐式锁和显示锁_锁的类型以及粒度,两段锁协议,隐式和显示锁
  4. IDEA使用技巧整理
  5. 这又何止呢的openeim002
  6. Posix线程编程指南(4) 线程终止
  7. c语言abs作用是什么意思,c语言fabs()是什么意思?和abs()有什么区别
  8. uni-app 微信小程序启用组件按需注入
  9. 腾讯广告算法大赛2019
  10. python把所有txt文件整合在一起(步道乐跑题库)
  11. 【如何编码实现一个随机点名器】
  12. MTCNN中的重叠度IOU和非极大值抑制NMS原理及Python实现
  13. Memcache教程
  14. 如何从零开发一个低代码平台,有哪些成熟技术组件可用
  15. 英伟达驱动安装(华为makebook13-2018 NVIDIA-GeForce-MX150)
  16. ZYNQ 之PS 和PL 互联技术之AXI
  17. 无人驾驶汽车系统入门(十九)——分层有限状态机和无人车行为规划
  18. 安装配置sublime text2 最全教程
  19. macOS上HomeBrew安装软件慢的解决方法
  20. CentOS 远程连接不上问题的解决

热门文章

  1. 顺序结构,选择结构和循环结构
  2. 为长颈鹿做一个名片二维码,扫描就能了解它的详细信息
  3. android控制板
  4. 2021年焊工(初级)考试资料及焊工(初级)免费试题
  5. 实现数据库存入html代码,并在前端就页面返回。
  6. hihoCoder184——满减优惠
  7. 三星860EVO SSD评测
  8. 走近腾讯技术大牛——2012年腾讯线下讨论PPT大盘点
  9. 大学生计算机装机配置作业,不愧是计算机专业的大学生,自己写配置来装机,万元电脑真霸气...
  10. mmTrix大数据分析平台构建实录