什么是DAG图中的关键路径?简单的将就是不可以推辞的活动组成的路径,这对于工程上有着极其重要的应用,利用关键路径算法可以计算那些事件是不可推辞的,必须如期完成,下面是代码:

//关键路径算法
//图的邻接矩阵表示法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stack>
#include <queue>
using namespace std;
#define Max 100
#define Inf 0x1111
typedef char type;
typedef struct Grap{type data[Max];int value[Max][Max];int n,m;
}Grap,*pgrap;
int Located(pgrap g,char ch){for(int i=0;i<g->n;i++)if(g->data[i]==ch)return i;
}
int invalue[Max];
int ve[Max];
int vl[Max];
bool trag;
stack<int> s;
stack<int> t;
void Creat_grap(pgrap g){printf("输入图的顶点数和边数:\n");scanf("%d%d",&g->n,&g->m);//printf("ksgfdkj\n");getchar();printf("输入图中的顶点:\n");int i,j;for(i=0;i<g->n;i++){g->data[i]=getchar();getchar();}for(i=0;i<g->n;i++)for(j=0;j<g->n;j++)g->value[i][j]=Inf;printf("请输入图中的边:\n");int index1,index2,value;char ch1,ch2;while(g->m--){scanf("%c,%c,%d",&ch1,&ch2,&value);getchar();index1=Located(g,ch1);index2=Located(g,ch2);g->value[index1][index2]=value;//无向图//g->value[index2][index1]=value;}
}
void In_value(pgrap g){memset(invalue,0,sizeof(invalue));for(int i=0;i<g->n;i++)for(int j=0;j<g->n;j++)if(g->value[j][i]!=Inf)invalue[i]++;
}
void tuopu(pgrap g){int i,index,count=0;trag=true;memset(ve,0,sizeof(ve));for(i=0;i<g->n;i++)if(invalue[i]==0)s.push(i);while(!s.empty()){index=s.top();s.pop();t.push(index);count++;for(i=0;i<g->n;i++)if(g->value[index][i]!=Inf){if(--invalue[i]==0)s.push(i);if(ve[index]+g->value[index][i]>ve[i])ve[i]=ve[index]+g->value[index][i];}}if(count<g->n)trag=false;
}
void Keyway(pgrap g){if(!trag){printf("图中存在环\n");return ;}int i,j,index,end=t.top();for(i=0;i<g->n;i++)vl[i]=ve[end];while(!t.empty()){index=t.top();t.pop();for(i=0;i<g->n;i++)if(g->value[index][i]!=Inf)if(vl[i]-g->value[index][i]<vl[index])vl[index]=vl[i]-g->value[index][i];}int early,later;char tragg;for(i=0;i<g->n;i++)for(j=0;j<g->n;j++)if(g->value[i][j]!=Inf){early=ve[i];later=vl[j]-g->value[i][j];tragg=(early==later)?'Y':'N';printf("类型,起点,终点,最早发生时间,最晚发生时间,活动耗时\n");printf("%c,%c,%c,%d,%d,%d\n",tragg,g->data[i],g->data[j],early,later,g->value[i][j]);}
}int main(){Grap g;pgrap p=&g;Creat_grap(p);In_value(p);tuopu(p);Keyway(p);return 0;
}

测试数据:

输入图的顶点数和边数:
6 9
输入图中的顶点:
A
B
C
D
E
F
请输入图中的边:
A,B,1
A,C,3
B,D,4
B,C,1
C,D,1
D,E,2
C,E,1
E,F,1
D,F,1
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
Y,A,B,0,0,1
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
N,A,C,0,1,3
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
N,B,C,1,3,1
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
Y,B,D,1,1,4
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
N,C,D,3,4,1
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
N,C,E,3,6,1
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
Y,D,E,5,5,2
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
N,D,F,5,7,1
类型,起点,终点,最早发生时间,最晚发生时间,活动耗时
Y,E,F,7,7,1

Terminated with return code 0
Press any key to continue ...

DAG图中的关键路径算法相关推荐

  1. C++实现AOE网中的关键路径算法(邻接表存储)

    代码如下: #include <iostream> #include <stack> #include <string> using namespace std; ...

  2. C++实现AOE网中的关键路径算法及机动时间计算算法(邻接表存储)

    代码如下: #include <iostream> #include <stack> using namespace std; const int N = 100;typede ...

  3. 百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路!

    作者| 阿里文娱高级专家 随方, 阿里文娱开发专家 轩成 责编 | 屠敏 头图 | CSDN 下载自视觉中国 背景 在阿里的业务中,有广泛的算法应用场景,也沉淀了相关的算法应用平台和工具:基础的算法引 ...

  4. Gantt(甘特图)与PERT(项目计划评审技术)图,项目关键路径和松弛时间

    甘特图也叫做进度管理图. 他是一种简单的水平条形图,它以日历为基准描述项目任务,水平轴表示日历时间线,每一个线条表示一个任务,任务名称垂直的列在左边列中,图中的线条的起点和终点对应水平轴上的时间,分别 ...

  5. 深度强化学习中Double DQN算法(Q-Learning+CNN)的讲解及在Asterix游戏上的实战(超详细 附源码)

    需要源码和环境搭建请点赞关注收藏后评论区留下QQ~~~ 一.核心思想 针对DQN中出现的高估问题,有人提出深度双Q网络算法(DDQN),该算法是将强化学习中的双Q学习应用于DQN中.在强化学习中,双Q ...

  6. DAG 图关键路径算法

    关键路径 如果DAG图拓扑有序,那么此图可以转换成线性的先后关系,而不需要回退去访问数据.如果项目安排的事件拓扑有序,那么此项目中的各个事件的依存关系不可以解耦,不会形成连环套而致使项目无法开展.项目 ...

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

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

  8. 【数据结构】什么的图的关键路径?关键路径相关概念?关键路径算法实现?

    目录 一.什么是关键路径? 1.现实问题 二.关键路径相关概念? 三.关键路径算法实现? 1.算法分析 2.算法步骤 3.算法实现 一.什么是关键路径? 关键路径:若有向图中,各顶点表示事件,各有向边 ...

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

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

  10. 【算法】图(一)拓扑排序的实现 图的邻接表算法 判断是否图G中存在环

    文章目录 用list来表示图,判断是否存在环 邻接表实现拓扑排序 用DFS(邻接矩阵) 来实现拓扑排序. 判断无向图顶点是否全部连通 判断图G中从顶点u到v是否存在简单路径 输出图G中从顶点u到v的所 ...

最新文章

  1. 连接查询中的ON 子句和 WHERE 子句
  2. STL中的priority_queue(优先队列)
  3. 微软面试中简单的算法题目(转)
  4. 把自定义url配置到SAP Fiori Launchpad上打开
  5. 昆明理工计算机科学,昆明理工大学的计算机
  6. 互联网新人最热门去处:前三名毫无意外!
  7. Linux指纹识别程序,linux上应用指纹识别(转载)
  8. ListView嵌套ScrollView后,设置dividerHeight属性后高度计算
  9. dll反编译工具ILspy下载及使用
  10. 关于ShadowMap中Shadow acne现象的解释
  11. linux wine乱码,解决wine中文乱码的问题
  12. 笔记本电脑的计算机配置在哪里可以找到,笔记本无线设置在哪里_笔记本电脑设置无线网络的步骤-win7之家...
  13. GCD中dispatch_group的使用方法
  14. STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)
  15. 更改Ubuntu软件镜像为清华镜像
  16. 彻底搞懂MySQL表锁、行锁和叶锁
  17. SQL的交叉表、行列转换和交叉查询经典
  18. java循环屏障,Java并发编程系列23|循环屏障CyclicBarrier
  19. android dolphin 手柄,使用安卓手机充当PC上WII模拟器手柄
  20. 配置ArchLinux系统

热门文章

  1. jq ui-selectable中click单击事件,dblclick双击事件无效
  2. 用的iapp教程手册,iapp模块的使用教程
  3. 磁共振计算机都是量子技术吗,IBM利用磁共振对单个原子成像 未来用于量子计算机...
  4. Matlab神经网络基础
  5. 汽车电工及电子技术基础【2】
  6. 设计心理学1-日常的设计【读书笔记】
  7. 电子计算机主机房国标,中华人民共和国国家标准电子计算机机房设计规范GB50174-93...
  8. 几款常用UML建模工具介绍
  9. 离散中多重组合是指_大学离散数学复习试题
  10. 感谢CSDN编辑精心采访--将人文融入到科技产品中