- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关键路径求解.doc
数据结构中关键路径算法的实现与应用
摘? 要? 介绍求关键路经的算法,对于给出的事件结点网络,要求求出从起点到终点的所有路径,经分析、比较后找出长读最大的路径,从而得出求关键路径的算法,并给出计算机上机实现的源程序。
关键词 ?关键路径 最少时间
1:引言
通常把计划、施工过程、生产流程、程序流程的都当成一个工程。除了很小的工程外、一般都把工程分为若干个叫做“活动”的子工程。完成了这些“活动”的子工程,这个工程就可以完成了。
通常我们用有向图表示一个工程。在这种有向图中,用顶点表示活动,用有向边
Vi,Vj表示活动Vi必须先于活动Vj进行。如果在无有向环的带权有向图中用有向边表示一个工程中的各项活动(ACTIVITY),用有向边上的权值表示活动的持续时间(DURATION),用顶点表示事件(EVENT),则这种的有向图叫做用边表示活动的网络,简称AOE(active on edges)网络。
??? AOE网络在某些工程估算方面非常有用。他可以使人们了解:
???????? (1):研究某个工程至少需要多少时间?
???????? (2):那些活动是影响工程进度的关键?
在AOE网络中,有些活动可以并行的进行。从源点到各个顶点,以至从源点到汇点的有向路径可能不止一条。这些路径的长度也可能不同。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和。这条路径长度就叫做关键路径(critical path)。
2:设计步骤:
1: 以某一工程为蓝本,采用图的结构表示实际的工程计划的时间。
2: 调查以分析和预测这个工程计划个阶段的时间。
??????? 3: 用调查的结果建立AOE网(Activity On Edge Network),即边表示活动的网络,并用图的形式表示。
4: 用图来存储这些信息。
??????? 5: 用CreateGraphic();函数建立AOE图。
??????? 6: 用SearchMapPath();函数求出最大路径,并打印出关键路径。
??????? 7:编写代码
??????? 8: 测试
3: 设计代码:
#includestdio.h
#includestdlib.h
#includeiomanip.h
#include process.h
//#define PROJECTNUMBER? 9//10
//#define PLANNUMBER 11//13
typedef struct node
{
?????? int adjvex;
?????? int dut;
?????? struct node *next;
}edgenode;
typedef struct
{
?????? int? projectname;
?????? int? id;
?????? edgenode *link;
}vexnode;
//vexnode Graphicmap[PROJECTNUMBER];
void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber)
{
?????? int begin,end,duttem;
?????? edgenode *p;
?????? for(int i=0;iprojectnumber;i++)
?????? {
??????? Graphicmap[i].projectname=i;
?????? ?????? Graphicmap[i].id =0;
?????? ?????? Graphicmap[i].link =NULL;
?????? }????
?????? printf(某项目的开始到结束在图中的节点输入vi,vj,dut\n);
?????? printf(如:3,4,9 回车表示第三节点到第四节点之间的活动用了9个单位时间\n);
?????? for(int k=0;kactivenumber;k++)
?????? {
?????? ?????? scanf(%d,%d,%d,begin,end,duttem);
?????? ?????? p=(edgenode*)malloc(sizeof(edgenode));
?????? ?????? p-adjvex =end-1;
????????????? p-dut =duttem;
?????? ?????? Graphicmap[end-1].id ++;
?????? ?????? p-next =Graphicmap[begin-1
文档评论(0)