关键路径问题(Critical Path)

  • 一、基本术语
  • 二、如何求关键路径
    • 1、问题分析
    • 2、求关键路径的步骤
  • 三、算法实现
    • 1、算法思想
    • 2、算法描述

AOE网(Activity On Edges)------用边表示活动的网络
1、用一个有向图表示一个工程的各子工程及其相互制约的关系,弧表示活动,权表示活动持续的时间,顶点表示事件(活动的开始或结束时间),称这种有向图为边表示活动的网,简称AOE网。
2、AOE网用来估算工程的完成时间。

一、基本术语

源点:入度为0的顶点(只有一个)
汇点:出度为0的顶点(只有一个)
路径长度:路径上各活动持续时间之和
整个工程完成的时间:从有向图的源点到汇点的最长路径
关键路径:路径长度最长的路径

二、如何求关键路径

1、问题分析

2、求关键路径的步骤




三、算法实现

1、算法思想

(1)设每个结点的最早发生时间为0,将入度为0的结点进栈
(2)将栈中入度为0的结点V取出,并压入另一个栈,用于形成逆向拓扑排序的序列
(3)根据邻接表找到结点V的所有的邻接结点,将结点V的最早发生时间+活动的权值 得到的和同邻接结点的原最早发生时间进行比较;如果该值大,则用该值取代原最早发生时间。另外,将这些邻接结点的入度减一。如果某一结点的入度变为0,则进栈。
(4)反复执行2、3;直至栈空为止。

2、算法描述

Status CriticalPath(ALGraph G)
{//G为邻接表存储的有向网,输出G的各项关键活动if (!TopologicalOrder(G, topo)) return ERROR;//调用拓扑排序算法,使拓扑序列保存在topo中,若调用失败,则存在有向环n = G.vexnum;           //n为顶点的个数for (i = 0;i < n;i++)            //给每个事件的最早发生时间置初值为0ve[i] = 0;/*按照拓扑次序求每个事件的最早发生时间*/for (i = 0;i < n;i++)         //for循环结束才能求得最早发生时间{k = topo[i];           //取得拓扑序列中的顶点序号kp = G.vertices[k].firstarc;         //p指向k的第一个邻接点while (p != NULL)         //依次更新k的所有邻接顶点的最早发生时间{j = p->adjvex;            //j为邻接顶点的序号if (ve[j] < ve[k] + p->weight)            //更新顶点j的最早发生时间ve[j]ve[j] = ve[k] + p->weight;p = p->nextarc;           //p指向k的下一个邻接顶点}}for (i = 0;i < n;i++)         //给每个事件的最迟发生时间置初值为ve[n-1]vl[i] = ve[n - 1];/*按逆拓扑次序求每个事件的最迟发生时间*/for (i = n - 1;i >= 0;i--){k = topo[i];         //取得拓扑序列中的顶点序号kArcNode* p = G.vertices[k].firstarc;            //p指向k的第一个邻接顶点while (p != NULL){   //根据k的邻接点,更新k的最迟发生时间j = p->adjvex;           //j为邻接顶点的序号if (vl[k] > vl[j] - p->weight)         //更新顶点k的最迟发生时间vl[k]vl[k] = > vl[j] - p->weight;p = p->nextarc;           //p指向下一个邻接顶点}}/*判断每一活动是否为关键活动*/for (i = 0;i < n;i++){ //每次循环针对vi为活动开始点的所有活动p = G.vertices[i].firstarc;           //p指向i的第一个邻接顶点while (p != NULL){j = p->adjvex;         //j为i的邻接顶点的序号e = ve[i];            //计算活动<vi,vj>的最早开始时间l = vl[j] - p->weight;            //计算活动<vi,vj>的最迟开始时间if (e == l)     //若为关键活动,输出<vi,vj>cout << G.vertices[i].data << G.vertices[j].data;p = p->nextarc;         //p指向i的下一个邻接顶点}}
}

【关键路径问题(Critical Path)——图】相关推荐

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

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

  2. 关键路径例题图表_算法学习记录-图——应用之关键路径(Critical Path)

    之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间. 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE).(Activity On ...

  3. 关键路径法(Critical Path Method, CPM)

    关键路径法定义 关键路径法(Critical Path Method, CPM)是一种基于数学计算的项目计划管理方法,是网络图计划方法的一种,属于肯定型的网络图.关键路径法将项目分解成为多个独立的活动 ...

  4. 数据结构之图的应用(四)之关键路径

    前面已经分享完了图的应用的三种.这三种可以说是很重要的,涉及了几个重要算法.今天,我们来分享<数据结构与算法>书本里的图的第四种应用--关键路径.下面我们一起来看看吧 1.AOE网 在前一 ...

  5. 48. 数据结构笔记之四十八的有向无环图的应用关键路径

    48. 数据结构笔记之四十八的有向无环图的应用关键路径 "富贵不淫贫贱乐 , 男儿到此是豪雄.-- 程颢" 来看下有向无环图的另一个应用关键路径. 1.  关键路径 与AOV-网相 ...

  6. 有向无环图之关键路径

    **有向无环图之关键路径** 1 AOE-网:边表示活动的网.AOE-网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时间. 2 通常AOE-网可用来估算工程的完成时间. 例图 ...

  7. Gantt图和PERT图的相关知识

    1.Gantt 图 Gantt图以时间为基准描述项目任务,可以清晰的描述每个任务从何时开始,到何时结束,以及每个任务的并行关系,但是不能反映项目各任务之间的依赖关系,也无法确定整个任务的关键所在. 2 ...

  8. 图论算法 有图有代码 万字总结 向前辈致敬

    图的定义 背景知识 看到这篇博客相信一开始映入读者眼帘的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题).在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛).这条河将陆地分成了下面4个区域, ...

  9. 数据结构:图的基础知识

    文章目录 图 图论基础 图的定义 图的基本概念 图的存储结构 邻接矩阵 邻接表 图的创建和销毁* 图的遍历算法 深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS) 最小生成树 Prim 算法 Kr ...

最新文章

  1. Ubuntu 系统如何修改主机名
  2. pptxgenjs一个月深度使用感受(未完待续……)
  3. C++基本序列式容器 vector (一)
  4. 云炬WEB开发笔记 2-1开发环境搭建
  5. showModalDialog弹窗
  6. 工业接口RS-485的设计应用指南
  7. 把Sublime Text 2打造成一个轻量级Python的IDE
  8. r语言liftchart_R语言强大的绘图功能--附数据和代码
  9. 打造创新电磁诊疗技术平台,睿笛生物获比邻星创投、三捷资本数千万元投资...
  10. CCF NOI1154 大整数开方
  11. Java代理模式实现与原理详解(二)
  12. CVPR 2021 | 自监督学习新思路!S2-BNN:基于蒸馏的自监督学习算法
  13. Python使用turtle绘图中设置小乌龟(画笔)旋转的角度turtle.setheading()
  14. Zabbix篇之Web登录页面报错:Database:Error connecting to database: Access denied for user ‘zabbix‘ @ ‘localhos
  15. 华为上研所无线嵌入式优招面经
  16. 好书整理系列之-设计模式:可复用面向对象软件的基础 4
  17. Codeforces Round #801 (Div. 2) D2(思维/dfs)
  18. 南邮考研811数据结构经验分享
  19. mac使用php无法写入文件,mac移动硬盘无法写入怎么办
  20. 股票数据爬虫(Scrapy框架与requests-bs4-re技术路线)

热门文章

  1. C#--SelectedIndexChanged事件, SelectedValueChanged事件和SelectionChangeCommitted事件的区别及联系
  2. css模拟蜡烛火焰效果
  3. python -day06初始面向对象
  4. python svg2rlg_python提取pdf文档中的表格数据、svg格式转换为pdf
  5. 学习python 115小时后,告诉想学爬虫的你,别怕,爬虫,没那么难抓!
  6. oracle function函数
  7. 英语四级考试计算机游戏,2017下半年英语四级作文范文:网络游戏
  8. 学以致用,boxshadow实现手风琴悬停效果
  9. maven打普通包jar包(依赖一并打入)
  10. x11vnc安装及使用