图的关键路径--最早开始时间和最晚开始时间
(实验内容只是求关键路径的一部分,在网站找不到只含这一部分的参考,所以自己给搞了一下,欢迎大佬指正。)
题目描述:给定有向图无环的边信息,求每个顶点的最早开始时间、最迟开始时间。
输入
第一行图的顶点总数
第二行边的总数
第三行开始,每条边的时间长度,格式为源结点 目的结点 长度
输出
第一行:第个顶点的最早开始时间
第二行:每个顶点的最迟开始时间
样例输入:
9
12
0 1 3
0 2 10
1 3 9
1 4 13
2 4 12
2 5 7
3 6 8
3 7 4
4 7 6
5 7 11
6 8 2
7 8 5
样例输出:
0 3 10 12 22 17 20 28 33
0 9 10 23 22 17 31 28 33
代码(含解析):
#include<iostream>
#include<queue>
using namespace std;
int main()
{int vexnum;int arcnum;cin >> vexnum >> arcnum;int* in = new int[vexnum];int* ve = new int[vexnum];//最早开始时间int* vl = new int[vexnum];//最晚开始时间int** p;p = new int* [vexnum];for (int i = 0; i < vexnum; i++) {in[i] = 0;p[i] = new int[vexnum];for (int j = 0; j < vexnum; j++)p[i][j] = 0;}int s1, s2, length;for (int i = 0; i < arcnum; i++){cin >> s1 >> s2 >> length;p[s1][s2] = length;if (p[s1][s2] != 0){in[s2] += 1;}}queue<int>Q;for (int i = 0; i < vexnum; i++){if (in[i] == 0)Q.push(i);}int* list = new int[vexnum+1];//建立一个数组存放拓扑排序的结果int i = 0;while (!Q.empty()){int t = Q.front();Q.pop();for (int j = 0; j < vexnum; j++){if (p[t][j] != 0){in[j]--;if (in[j] == 0)Q.push(j);}}list[i] = t; i++;}ve[0] = 0;for (int i = 0; i < vexnum; i++)vl[i] = 0;for (int j = 1; j < vexnum; j++){int max = 0;for (int i = 0; i < vexnum; i++){if (p[list[i]][list[j]]!=0&&(p[list[i]][list[j]] + ve[i])> max){max = p[list[i]][list[j]] + ve[i];}}ve[j] = max;}for (int i = 0; i < vexnum; i++){for (int j = 0; j < vexnum; j++)//题目输出按照拓扑排序的顺序,需要进行这一步查找if (list[j] == i)cout << ve[j] << " ";}cout << endl;vl[vexnum - 1] = ve[vexnum - 1];for (int i = vexnum - 2; i > 0; i--){int min = 1000;for (int j = vexnum - 1; j >= 0; j--){if (p[list[i]][list[j]] != 0 && (vl[j] - p[list[i]][list[j]]) < min){min = vl[j] - p[list[i]][list[j]];}}vl[i] = min;}for (int i = 0; i < vexnum; i++){for(int j=0;j<vexnum;j++)if(list[j] == i)cout << vl[j] << " ";}cout << endl;
}
图的关键路径--最早开始时间和最晚开始时间相关推荐
- 详解活动图计算关键路径、最早开始时间、最晚开始时间、冗余时间,C++ 程序实现
题目 下图是一个软件开发项目的活动图,对于图中每条边的数字表示完成这条边代表的活动的天数.例如,完成终止于里程碑E的活动需要 4 天时间. 对于每个活动,列出它的前驱,并计算最早开始时间.最晚开始时间 ...
- 软件项目管理中通过CPM算法求关键路径,最早和最晚开始时间
首先贴一下百度百科对CPM的定义: 关键路径法(Critical Path Method, CPM)是一种基于数学计算的项目计划管理方法,是网络图计划方法的一种,属于肯定型的网络图.关键路径法将项目分 ...
- 图的关键路径(含多支交叉路径分离输出)
文章目录 关键路径的理解 关键路径求解的图解与分析 关键路径查找的代码实现 多支交叉路径的分离输出 总结 此文代码均可在Windows与Linux操作系统下的常用编译器上运行,例如:vs.vscode ...
- 活动图当中的关键路径、点的最早开始时间最晚开始时间、活动的最长耽搁时间、最晚开工时间
1.关键路径 最长的 2.点的最早开始时间 最长的 3.点的最晚开始时间 关键路径-该点到终点的最大值 4.活动最多可以耽搁的时间 后继点的最晚-前继点的最早-该活动时间 5.活动的最晚开始时间 关键 ...
- AOE图,最早活动时间最晚活动时间,关键路径关键节点
我们直接举例,假设你和朋友约好去看电影,V7是你们约定到达地点的时间,v1节点是大家一起从各自家里出发的时间,其中的v2,v3,v4,v5,v6是各自坐交通工具到达换乘地点的时间,其中边的权值为你需要 ...
- 软件工程之PERT图(关键路径)
三 用途 PERT图一般用于计算关键路径 3.1 关键路径的概念 关键路径指的是花费时间最长的事件和活动的序列. 相关概念说明: ①最早开始时间:某段工程开始点之前最长的输入流之和 ②最晚开始:关键路 ...
- 有向无环图之关键路径
**有向无环图之关键路径** 1 AOE-网:边表示活动的网.AOE-网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时间. 2 通常AOE-网可用来估算工程的完成时间. 例图 ...
- 【数据结构】什么的图的关键路径?关键路径相关概念?关键路径算法实现?
目录 一.什么是关键路径? 1.现实问题 二.关键路径相关概念? 三.关键路径算法实现? 1.算法分析 2.算法步骤 3.算法实现 一.什么是关键路径? 关键路径:若有向图中,各顶点表示事件,各有向边 ...
- 关键路径最早最迟开始时间
数据结构AOE网关键路径问题,不算活动差,直接看事件最迟最早差,差为0的就是关键路径,这样做对么? 数据结构AOE网关键路径问题,不算活动差,直接看事件最迟最早差,差为0的就是关键路径,这样做对么?我 ...
最新文章
- python实现STM32单片机通信
- 戴尔5598安装系统流程
- Nginx 启动报错 “/var/run/nginx/nginx.pid failed”
- 找到符合条件的索引_程序员写了多年CRUD,总结出数据库索引这几点值得注意...
- 2019公需科目快速学完_3周考过科目二,是这样做到的!
- 手写分页 个人感觉还能优化,甚至抽象出来,需要高手讲解
- Nginx 指令目录(中文版)
- SQL OUTER JOIN概述和示例
- 让你更好的使用jQuery插件
- 软件构造笔记——Java基本数据类型和对象数据类型
- 学生个人网页模板 学生个人网页设计作品 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计
- 经纬财富:四平怎么炒白银能挣到钱?
- 英:英语面试常用口语900句
- 流批OLAP一体的flink引擎
- 实现一个方法,给定一个输入字符串,能够删除所有连续同样字母(大小写不敏感)。例如,输入为ABBCCCCCBBAB,输出就是 ABCBAB
- 转自科学网:《评论:“副教授,我缺少的是什么?”》
- ParaView-2
- 尚硅谷 JavaScript 笔记(张晓飞 2019 高级版)
- FOURCC四字符码对照表
- video dispose