- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
—20—
—19—
课题内容和要求
关键路径问题。
二、设计思路分析
(1)选取建图的一种算法建立图,有邻接矩阵,邻接表,十字链表,邻接多重表等多种方法,要选取一种适当的方法建立图,才能提高算法效率,降低时间复杂度和空间复杂度。
(2)两个相邻顶点与它们之间的边表示活动,边上的数字表示活动延续的时间。对于给出的事件AOE网络,要求求出从起点到终点的所有路径,经分析、比较后找出长读最大的路径,从而得出求关键路径的算法,并给出计算机上机实现的源程序。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。
具体要解决的问题有如下四个:
1) 将项目中的各项活动视为有一个时间属性的结点,从项目起点到终点进行排列;
2) 用有方向的线段标出各结点的紧前活动和紧后活动的关系,使之成为一个有方向的网络图;
3) 用正推法和逆推法计算出各个活动的最早开始时间,最晚开始时间,最早完工时间和最迟完工时间,并计算出各个活动的时差;
4) 找出所有时差为零的活动所组成的路线,即为关键路径;
三、概要设计
算法分析:
(1)求关键路径必须在拓扑排序的前提下进行,有环图不能求关键路径;
(2)只有缩短关键活动的工期才有可能缩短工期;
(3)若一个关键活动不在所有的关键路径上,减少它并不能减少工期;
(4)只有在不改变关键路径的前提下,缩短关键活动才能缩短整个工期。
(5)关键路径?:从源点到汇点的路径长度最长的路径叫关键路径。
(6)活动开始的最早时间e(i);
(7)活动开始的最晚时间l(i);
(8)定义e(i)=l(i)的活动叫关键活动;
(9)事件开始的最早时间ve(i);
(10)事件开始的最晚时间vl(i)。
设活动ai由弧j,k(即从顶点j到k)表示,其持续时间记为dut(j,k),则: e(i)=ve(j) l(i)=vl(k)-dut(j,k)? ?
? ?? ?? ?? ?? ?? ?? ? 求ve(i)和vl(j)分两步: 1.从ve(1)=0开始向前递推
ve(j)=Max{ ve(i)+dut(i,j) }?? ?? i,jT,??2=j=n 其中,T是所有以j为弧头的弧的集合。 2.从vl(n)=ve(n)开始向后递推 vl(i)=Min{ vl(j)-dut(i,j) }? ?? i,jS,??1=i=n-1 其中,S是所有以i为弧尾的弧的集合。两个递推公式是在拓扑有序和逆拓扑有序的前提下进行。
算法步骤:
(1)输入e条弧j,k,建立AOE网的存储结构。(2)从源点v1出发,令ve(1)=0,求 ve(j),2=j=n。(3)从汇点vn出发,令vl(n)=ve(n),求 vl(i)? ? 1=i=n-1。(4)根据各顶点的ve和vl值,求每条弧s(活动)的最早开始时间e(s)和最晚开始时间l(s),其中e(s)=l(s)的为关键活动。
四、详细设计
主要函数的核心代码:
创建图的函数
求出最大路径,并打印出关键路径的函数
球关键路径的函数
主函数
#includestdio.h
#includestdlib.h
#includeiomanip.h
#include process.h
typedef struct node//边表结点
{
int adjvex; //邻接点编号
int dut; //弧的信息
struct node *next; //下一条弧指针
}edgenode;
typedef struct //顶点表结点
{
int projectname;//顶点域
int id;//顶点的入度信息
edgenode *link; //边表头指针
}vexnode;
void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber)//创建图
{
int begin,end,duttem; //分别代表弧的前节点,尾节点,活动时间
edgenode *p;// 边表头指针
for(int i=0;iprojectnumber;i++)
{
Graphicmap[i].projectname=i;//顶点的命名按0,1,2,3......
Graphicmap[i].id =0;//顶点的信息的度数均赋为零
Graphicmap[i].link =NULL;
}
printf(\n);
printf(请输入某项目的信息,并请用整形数字表示(格式:弧头,弧尾,权值):\
您可能关注的文档
- 2017年新民学校冬季运动会竞赛方案.docx
- 2017上学期小学四年级英语上册教师个人总结(反思小结) (2).docx
- 2017下学期小学语文培优补差计划.docx
- 2017学年第二学期上师附小小学英语教研组计划.docx
- 2018小学教师个人发展计划书(三篇).docx
- 北师大版小学二年级数学上册学业质量评价方案.docx
- 第二小学2017-2018(下)学年-春季趣味运动会及体育特色课程比赛-(实施方案).docx
- 联想的国际化战略英文lenovo'sinternationalstrategy.doc
- 某新建工业项目财务评价案例.doc
- 简单的JAVA员工信息管理系统源码.docx
- 2024至2030年中国带箔材行业投资前景及策略咨询研究报告.docx
- 2024至2030年过流紫外线杀菌器项目投资价值分析报告.docx
- 2024至2030年中国不锈钢烧烤架数据监测研究报告.docx
- 2024至2030年中国纯棉睡衣数据监测研究报告.docx
- 2024至2030年液晶显示屏项目投资价值分析报告.docx
- 2024至2030年中国厨勺行业投资前景及策略咨询研究报告.docx
- 2024年针织罗纹领子项目可行性研究报告.docx
- 2010-2023历年河北省邯郸一中高三上学期月考历史试卷(带解析).docx
- 2010-2023历年福建省永安市九年级下学期学业质量检测考试政治试卷(带解析).docx
- 2010-2023历年江苏省青云中学七年级上学期期中考试数学卷.doc.docx
文档评论(0)