【关键路径问题(Critical Path)——图】
关键路径问题(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)——图】相关推荐
- 图算法入门4:活动网络-AOE网络和关键路径(critical path)
AOE网络的基本概念 上一节介绍了活动网络AOV网络的相关内容,这一节将进一步介绍另一种活动网络AOE网络.如果对于有向无环图(DAG),用有向边表示一个工程的各项活动(activity),边上的权值 ...
- 关键路径例题图表_算法学习记录-图——应用之关键路径(Critical Path)
之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间. 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE).(Activity On ...
- 关键路径法(Critical Path Method, CPM)
关键路径法定义 关键路径法(Critical Path Method, CPM)是一种基于数学计算的项目计划管理方法,是网络图计划方法的一种,属于肯定型的网络图.关键路径法将项目分解成为多个独立的活动 ...
- 数据结构之图的应用(四)之关键路径
前面已经分享完了图的应用的三种.这三种可以说是很重要的,涉及了几个重要算法.今天,我们来分享<数据结构与算法>书本里的图的第四种应用--关键路径.下面我们一起来看看吧 1.AOE网 在前一 ...
- 48. 数据结构笔记之四十八的有向无环图的应用关键路径
48. 数据结构笔记之四十八的有向无环图的应用关键路径 "富贵不淫贫贱乐 , 男儿到此是豪雄.-- 程颢" 来看下有向无环图的另一个应用关键路径. 1. 关键路径 与AOV-网相 ...
- 有向无环图之关键路径
**有向无环图之关键路径** 1 AOE-网:边表示活动的网.AOE-网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时间. 2 通常AOE-网可用来估算工程的完成时间. 例图 ...
- Gantt图和PERT图的相关知识
1.Gantt 图 Gantt图以时间为基准描述项目任务,可以清晰的描述每个任务从何时开始,到何时结束,以及每个任务的并行关系,但是不能反映项目各任务之间的依赖关系,也无法确定整个任务的关键所在. 2 ...
- 图论算法 有图有代码 万字总结 向前辈致敬
图的定义 背景知识 看到这篇博客相信一开始映入读者眼帘的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题).在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛).这条河将陆地分成了下面4个区域, ...
- 数据结构:图的基础知识
文章目录 图 图论基础 图的定义 图的基本概念 图的存储结构 邻接矩阵 邻接表 图的创建和销毁* 图的遍历算法 深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS) 最小生成树 Prim 算法 Kr ...
最新文章
- Ubuntu 系统如何修改主机名
- pptxgenjs一个月深度使用感受(未完待续……)
- C++基本序列式容器 vector (一)
- 云炬WEB开发笔记 2-1开发环境搭建
- showModalDialog弹窗
- 工业接口RS-485的设计应用指南
- 把Sublime Text 2打造成一个轻量级Python的IDE
- r语言liftchart_R语言强大的绘图功能--附数据和代码
- 打造创新电磁诊疗技术平台,睿笛生物获比邻星创投、三捷资本数千万元投资...
- CCF NOI1154 大整数开方
- Java代理模式实现与原理详解(二)
- CVPR 2021 | 自监督学习新思路!S2-BNN:基于蒸馏的自监督学习算法
- Python使用turtle绘图中设置小乌龟(画笔)旋转的角度turtle.setheading()
- Zabbix篇之Web登录页面报错:Database:Error connecting to database: Access denied for user ‘zabbix‘ @ ‘localhos
- 华为上研所无线嵌入式优招面经
- 好书整理系列之-设计模式:可复用面向对象软件的基础 4
- Codeforces Round #801 (Div. 2) D2(思维/dfs)
- 南邮考研811数据结构经验分享
- mac使用php无法写入文件,mac移动硬盘无法写入怎么办
- 股票数据爬虫(Scrapy框架与requests-bs4-re技术路线)
热门文章
- C#--SelectedIndexChanged事件, SelectedValueChanged事件和SelectionChangeCommitted事件的区别及联系
- css模拟蜡烛火焰效果
- python -day06初始面向对象
- python svg2rlg_python提取pdf文档中的表格数据、svg格式转换为pdf
- 学习python 115小时后,告诉想学爬虫的你,别怕,爬虫,没那么难抓!
- oracle function函数
- 英语四级考试计算机游戏,2017下半年英语四级作文范文:网络游戏
- 学以致用,boxshadow实现手风琴悬停效果
- maven打普通包jar包(依赖一并打入)
- x11vnc安装及使用