- 浏览: 534181 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (231)
- 一个操作系统的实现 (20)
- 汇编(NASM) (12)
- Linux编程 (11)
- 项目管理 (4)
- 计算机网络 (8)
- 设计模式(抽象&封装) (17)
- 数据结构和算法 (32)
- java基础 (6)
- UML细节 (2)
- C/C++ (31)
- Windows (2)
- 乱七八糟 (13)
- MyLaB (6)
- 系统程序员-成长计划 (8)
- POJ部分题目 (10)
- 数学 (6)
- 分布式 & 云计算 (2)
- python (13)
- 面试 (1)
- 链接、装载与库 (11)
- java并行编程 (3)
- 数据库 (0)
- 体系结构 (3)
- C++ template / STL (4)
- Linux环境和脚本 (6)
最新评论
-
chuanwang66:
默默水塘 写道typedef void(*Fun)(void) ...
C++虚函数表(转) -
默默水塘:
typedef void(*Fun)(void);
C++虚函数表(转) -
lishaoqingmn:
写的很好,例子简单明了,将观察者模式都表达了出来。
这里是ja ...
观察者模式——Observer
前面这段话是引用别人的,后面代码是自己写的,有待完善:
求关键路径的关键如下:
1、每个顶点所代表的事件的最早和最迟发生时间
2、每条弧所代表的活动的最早和最迟开始时间
事件的最早发生时间:ve[源点]=0,ve[k]=MAX{ve[j]+dut(<j,k>)},即在k前面的事件的最早发生时间加上那些事件到k所需要的时间所得的值中取最大值。
事件的最迟发生时间:vl[汇点]=ve[汇点],vl[j]=MIN{vl[k]-dut(<j,k>)},即在j后面的事件的最迟发生时间减去j到那些事件所需的时间所得的值中取最小值。
活动的最早开始时间:ee[i]=ve[j],即该项活动最早开始时间与该项活动的开始事件的最早时间相同
活动的最迟开始时间:el[i]=vl[k]-dut(<j,k>),即活动的最迟开始时间等于该项活动的结束事件的最迟发生时间减去该项活动持续的时间。
测试用例图示:
代码:
#include <iostream> #include <cstdio> using namespace std; int n; //顶点数 int m; //有向边数 int w[1001][1001]; //有向图权值 int indegree[1001]; //顶点入度 int queue[1001]; //已经找到的拓扑序列:从队首到队尾按照拓扑排序 int l=0; //逐个将已经找到的拓扑序列中的顶点queue[l]从有向图中删除掉(包括删除它的出边) int r=0; //拓扑子序列长度 :queue[r]为目前找到的拓扑子序列最后一个顶点 int ve[1001]; //顶点(事件) 的最早时间 int pi[1001]; //关键路径的前驱图 int path[1001]; /* 测试数据: (见图 ) 5 6 1 3 3 1 2 4 2 5 3 3 4 1 3 5 2 4 5 3 */ void init(){ int i,a,b,c; scanf("%d%d",&n,&m); for(i=1;i<=m;i++){ scanf("%d%d%d",&a,&b,&c); w[a][b]=c; indegree[b]++; } } /* 顶点i加入拓扑序列 */ inline void enQueue(int i){ queue[++r]=i; } /* 从有向图中删除顶点v --> 拓扑排序时逐个删除找到拓扑序的顶点v */ inline void del(int v){ int i; for(i=1;i<=n;i++){ if(w[v][i]){ indegree[i]--; if(!indegree[i]) enQueue(i); } } } /* 拓扑排序*/ void topo(){ //找拓扑序列的第一个顶点(不唯一) for(int i=1;i<=n;i++){ if(!indegree[i]) enQueue(i); } while(r<n){ l++; del(queue[l]); } } /* 关键路径由杜邦公司发明,决定整个项目的工期。 AOE网:用顶点表示事件,用弧表示活动,弧的权表示活动的持续时间。 对于一个工程,有一个顶点表示整个工程开始(事件),另一个顶点表示这个工程结束(事件) */ void criticalPath(){ int i,j; memset(ve,0,sizeof(ve)); /* ve[i]=max{v[j]+w[j][i]|w[j][i]>0} */ for(i=1;i<=n;i++){ //queue[i]: queue[1~n]按拓扑序排列的顶点 for(j=1;j<=n;j++){ //i的所有直接前驱 if ( (w[j][queue[i]]>0) && (ve[j]+w[j][queue[i]]>ve[queue[i]]) ){ ve[queue[i]]=ve[j]+w[j][queue[i]]; pi[queue[i]]=j; } } } } /*打印以i为终点的关键路径(包括i)*/ void print(int i){ if(i==1){ cout<<1; return; } print(pi[i]); cout<<"-->"<<i; } void print(){ printf("总工期: %d\n",ve[n]); printf("一条关键路径: "); print(n); } int main(){ init(); topo(); criticalPath(); print(); system("pause"); return 0; }
发表评论
-
快排备忘
2013-10-26 11:27 551http://hi.baidu.com/pluto455988 ... -
LRU简单实现C++
2013-10-17 10:52 3977页面置换算法: 在地址映射过程中,若在页面中发现所要访问的页 ... -
二叉树相关
2013-10-04 17:40 695本节主要是为了写二叉树类型题目练手的代码,重点培养运用“指针 ... -
双指针策略(《编程之美》3.5 最短摘要生成)
2013-03-26 15:17 2225本文源自《编程之美》3.5 最短摘要生成一课。 ... -
K-MEDOIDS聚类算法
2012-12-04 21:18 1945k-medoids聚类算法 (wiki上讲得很清楚啊:) ) ... -
搜索(三)——回溯
2012-11-23 15:23 1028一、回溯 和 深度搜索 ... -
哈希Hash
2012-11-21 14:42 982要点一:哈希表长度 的确定是个两难的问题:太短则容 ... -
状态压缩DP
2012-11-14 20:27 731引例、 例1、 例2、 例3、 ... -
模拟退火
2012-10-28 16:34 1205引用:http://www.cnblogs.com/heaad ... -
计算几何(一)——基础算法
2012-07-12 21:07 1905待续 《计算几何资料》为提纲 1. (1) 有向线段 ... -
计算几何(二)——平面最近点对
2012-07-12 10:54 890参考资料: 为何这个问题采用分治法 http://blog ... -
气泡滚大——剔除线性数据中的杂质
2012-06-18 09:43 943这是一道Java的面试题,但是我总结了除了一种自称为“ ... -
深入理解二分查找(二、二分答案)
2012-04-29 16:24 7184二分答案 如果已知候选答案的范围[min,max ... -
P问题、NP问题和NPC问题
2012-04-25 16:36 1049这篇文章转自这里 ... -
RMQ(Range Minimum/Maximum Query)区间最值查询
2012-04-18 20:47 1547一、RMQ问题描述 和 几种解题思路 RMQ问题 (Rang ... -
后缀数组
2012-04-16 09:49 1495一、后缀数组 及其对应的名次数组 举例:S=&quo ... -
大整数运算(部分转载)
2012-04-12 21:36 1176待补充:“浮点数高精度运算” 参见这里==> ... -
单向链表相关
2012-04-10 16:42 960单向链表是微软笔试常考的,参考这里:http://www.c ... -
搜索(二)——双向BFS
2012-03-24 17:18 3003参考这篇文章,以下前 ... -
搜索(一)——剪枝
2012-03-24 11:46 1540参考文档:《搜索方法 ...
相关推荐
程序+报告+说明 功能: 0 (创建一个工程) 1 (从文本导入一个工程) 2 (用邻接表输出工程及输出工程的关键路径)
本程序为用MFC做的可视化界面的程序 实现了求关键路径 的功能
用字符文件提供数据建立AOE网络邻接表存储结构,编写程序,输出一条关键路径以 及工程的最短完成时间。输出的关键路径用该路径上全部顶点的拓序有序序列表示。
关键路径
传统AoE算法求解关键路径的C++代码实现
这个程序为实现AOE求关键路径的程序,工具为VC,语言为C,内有readme,
有良好界面的JAVA编写的AOE网络求取关键路径,比较完善
本程序实现了根据你所输入的数据建图,并利用AOE求出最长路径长度,并标明关键路径
用C++实现的代码,求AOE网络的关键路径,有详细注释
C++ 关键路径 关键路径 AOE suanfa 算法
【摘 要】介绍AOE网中关键路径的相关概念,通过算法描述和实例,探讨基于拓扑排序求解、P矩阵的求解和广 度优先搜索遍历(BFS)方法三种算法,求解AOE网中关键路径的实现过程,并进一步从算法的时间复杂度、数据结 构形式...
数据结构课本上的求关键路径的算法,注释详细,应该对着书看都能懂的,基本都是书上的思路
在Windows7 64位+VS2015上运行求解AOE网关键路径的算法,邻接表表示的AOE网提示网中有回路,邻接矩阵表示的AOE网显示正确的信息?使用的算法是一样的,两种方法的相关类的接口函数也一致,为什么会出现这种问题?
本程序用c#编写,实现了建图,利用AOE实现求解关键路径问题,并标明那些路径为关键路径
C++数据结构 AOE CPP源文件 采用数据结构中的AOE方法对图的关键路径进行计算 :建立邻接表
关键路径通常(但并非总是)是决定项目工期的进度活动序列。它是项目中最长的路径,即使很小浮动也可能直接影响整个项目的最早完成时间。关键路径的工期决定了整个项目的工期,任何关键路径上的终端元素的延迟在浮动...
该程序能实现的功能,若活动图有回路则无法计算出关键路径,即解决了判断工程的可行性问题。通过对工程活动的输入,可以建立任意的AOE网进行判断。对于输入的网,可以计算出每个活动的最早开始时间,最迟开始时间...
图的应用 关于AOE网关键路径的算法 内容:按照图的“邻接表”存储结构表示AOE网,实现求其关键路径的算法
用networkx解决关键路径的问题并把图形画出来,但目前只能画出来节点,没画出边上权的值,待小编再研究一下networkx的用法,写出v2版带边权重的代码。