DAG图中的关键路径算法
来源:互联网 发布:unity3d 游戏手柄 编辑:程序博客网 时间:2024/05/21 19:29
什么是DAG图中的关键路径?简单的将就是不可以推辞的活动组成的路径,这对于工程上有着极其重要的应用,利用关键路径算法可以计算那些事件是不可推辞的,必须如期完成,下面是代码:
//关键路径算法//图的邻接矩阵表示法#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stack>#include <queue>using namespace std;#define Max 100#define Inf 0x1111typedef 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图中的关键路径算法
- 图的关键路径算法
- 关键路径在算法题中的应用
- 数据结构(20)--DAG应用之AOE网的关键路径
- 图算法 无圈图和关键路径分析
- 算法:图的关键路径-数据结构(24)
- 关键路径算法实现
- 关键路径算法
- 关键路径求解算法
- 算法 关键路径
- 【数据结构】关键路径算法
- 关键路径算法
- 关键路径算法
- 关键路径算法
- 关键路径--经典算法
- 算法导论 单源最短路径 DAG-SHORTEST-PATHS
- [算法]详解关键路径算法
- 关键路径算法以及实现
- 十月下旬腾讯,网易游戏,百度迅雷校园招聘笔试题集锦(第271-330题)
- shell-----使用tput和sleep从0开始计数到40
- 求两个字符串最大的公共字串的长度
- Java网络编程DatagramPacket传数据
- java面向对象基础小结(二)
- DAG图中的关键路径算法
- c语言循环线性队列的实现
- 判断一个字符串里有多少个对称子串?
- MySQL备份与恢复之保证数据一致性
- java中的FileFilter接口如何使用
- 字节流与字符流的学习
- 微软面试100题2010年版全部答案集锦(含下载地址)
- DWZ中刷新dialog的方案解决
- HashMap用法