关键路径算法课程设计

上传人:xins****2008 文档编号:197685309 上传时间:2023-04-05 格式:DOC 页数:15 大小:124KB
收藏 版权申诉 举报 下载
关键路径算法课程设计_第1页
第1页 / 共15页
关键路径算法课程设计_第2页
第2页 / 共15页
关键路径算法课程设计_第3页
第3页 / 共15页
资源描述:

《关键路径算法课程设计》由会员分享,可在线阅读,更多相关《关键路径算法课程设计(15页珍藏版)》请在装配图网上搜索。

1、沈阳航空工业学院课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:实现求关键路径的算法 院(系):计算机学院专 业:计算机科学与技术班 级:7401102学 号:20070401144姓 名:李恰指导教师:郑智勇完成日期:2009年7月8日沈阳航空工业学院课程设计报告 目 录第一章 需求分析11.1题目内容与要求11.2 题目理解与功能分析1第二章 概要设计22.1 设计思路22.2系统模块图2第三章 详细设计33.1 图存储结构的建立33.2 求取关键路径43.3 主程序建立4第四章 实验结果5参考文献6附 录(程序清单)7-1-沈阳航空工业学院课程设计报告 第一章 需求分析

2、第一章 需求分析 1.1 题目内容与要求内容:自拟定合适的方式 ,从键盘上输入一个AOE网,并用合适的存储结构存储该AOE网,然后求出该AOE网的关键路径。基本要求:1输入AOE网的方式要尽量的简单方便;2要能够较形象地观察AOE网和它的关键路径;3课程设计报告必须符合课程设计报告规范;4提交合格的课程设计报告,经指导教师测试课设完成(验收)程序,课设完成;1.2 题目理解与功能分析该题实质要求用数据结构中的图形知识编写一个求无循环有向帯权图中从起点到终点所有路径,经分析、比较求出长度最大路径,从而求出关键路径。通常我们用有向图表示一个工程。在这种有向图中,用顶点表示活动,用有向边表示活动Vi

3、必须先于活动Vj进行。如果在这种图中用有向边表示一个工程中的各项活动(ACTIVITY),用有向边上的权值表示活动的持续时间(DURATION),用顶点表示事件(EVENT),则这种的有向图叫做用边表示活动的网络,简称AOE网络。在AOE网络中,从源点到各个顶点,可能不止一条。这些路径的长度也可能不同。不同路径所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和。这条路径长度就叫做关键路径(critical path)。 程序所要达到的功能:输入并建立AOE网;输出关键活动并求

4、出这个工程的关键路径;求出完成这个关键路径的最少时间并输出,该程序结束。沈阳航空工业学院课程设计报告 第二章 概要设计第二章 概要设计2.1 设计思路基本设计思路:(1) 以某一个求无循环有向帯权图蓝本。(2) 观察并记录这个图中每个弧的起始点及权值。 (3) 用记录的结果建立E网,即边表示活动的网络,并用图的形式表示。(4) 用领接表来存储图这些信息。 (5) 用CreateGraph( )函数建立AOE图。(6) 用SearchMapPath ( )函数求出最大路径,并打印出关键路径。(7) 编写代码并测试。2.2 系统模块图 图2-1系统模块图-13-沈阳航空工业学院课程设计报告 第四章

5、 实验结果第三章 详细设计3.1 图存储结构的建立1. 先建立邻接表的存储单元,为建立邻接表做准备。为图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向图是以vi为尾的弧)。每个结点由3个域组成,其中邻接域(adjvex)指示与顶点vi邻接的点在图中的位置,链域(nextedge)指示下一条边或弧的结点,权值域(W)存储边或弧的权值大小。在表头结点除了设有链域(firstedge)指向链表中第一个结点之外,还设有存储顶点v或其他有关的数据域(data)和存储顶点入度的域(id)(代码如下)。 typedef struct node int adjvex; int

6、w; struct node *nextedge; edgenode; typedef struct char data; int id; edgenode *firstedge; vexnode; 2. 然后构造有向图。第一,输入顶点信息存储在顶点表中,并初始化该顶点的便表。第二,首先输入边所依附的两个顶点的序号i和j然后生成新的邻接点序号为j的边表结点,最后将该结点插入到第i个表头部。(代码如下) for(int k=0;kadjvex =end-1; p-w =duttem; Graphend-1.id +; p-nextedge =Graphbegin-1.firstedge ; Gr

7、aphbegin-1.firstedge =p; 3.2 求取关键路径利用AOE网进行工程管理时,需解决的两个主要问题:其一,计算完成整个工程的最短工期;其二,确定关键路径,以找出哪些活动时影响工程进度的关键。因此须计算以下几点: (1)事件的最早发生时间vek;(2)事件最迟发生时间vlk;(3)活动最早开始时间eei;(4)活动的最迟开始时间eli;计算其过程必须分别在拓扑有序和逆拓扑有序的前提下进行。也就说,vek必须在事件vk所有前驱的最早发生的时间求得之后才能确定。因此,可以在拓扑排序的基础上计算vek和vlk。由此得到求解关键路径的方法:首先输入e条有向边,建立AOE网的邻接表存储

8、结构;然后从始点出发,令事件的最早发生时间为0,按拓扑有序求其余各顶点时间的最早发生时间vek;(代码如下) while(p) k=p-adjvex ; Graphk.id -; if(vej+p-w vek) vek=vej+p-w ; 接着从终点出发,令事件最迟发生时间等于其最早发生时间,按你你逆拓扑排序求其余各顶点事件最迟发生时间 vlk;最后根据各顶点事件的ve和vl值,求所有活动最早开始时间ee和最迟开始时间el。如果某活动满足条件eeel,则为关键活动。(代码如下) if(eli=eei) printf( 此弧为关键活动 ); 同时,为计算各顶点事件的ve值是在拓扑排序的过程中进行

9、的,因此需一个队列来记录拓扑排序,如果顶点的入度为0,则该顶点从队尾进入队列,拓扑排序时,从队头出队列。 if(Graphk.id =0) topology_queue+rear=k; p=p-nextedge ; 3.3 主程序建立该部分主要是对所建立的函数的调用。包括:建立图的函数CreateGraph( );计算关键路径的函数SearchMapPath ( );最后程序结束。这样安排可以增强程序的可读性,是程序便于理解,也便于日后的对程序的维护和修改等操作。第四章 实验结果按照要求输入一组关于无循环有向帯权图所有信息。依次执行程序每一步,最后结束该程序。程序运行如下图: 图4-1运行结果

10、沈阳航空工业学院课程设计报告 参考文献参考文献1 严蔚敏编.数据结构(C语言版).北京: 清华大学出版社,1997.22 谭浩强著.C语言程序设计(第二版).北京: 清华大出版社,2001.33 夏克俭编著.数据结构.北京: 国防工业出版社,2000.74 彭勃.数据结构.北京: 电子工业出版社,2007.65 宜晨编著.Visual C+5.0实用培训教程.北京:电子工业出版社,1998.56 崔武子.C语言程序设计实践教程.北京:清华大出版社, 2006.17 庞振平.计算机程序设计基础.广州: 华南理工出版社,2002.9沈阳航空工业学院课程设计报告 附 录附 录(程序清单)#inclu

11、de #include typedef struct node int adjvex; int w; struct node *nextedge; edgenode; typedef struct char data; int id; edgenode *firstedge; vexnode; void CreateGraph(vexnode* Graph,int vexnumber,int arcnumber) int begin,end,duttem; char ch; edgenode *p; for(int i=0;ivexnumber;i+) Graphi.id =0; Graphi

12、.firstedge =NULL; printf(请输入这个图中的各个顶点的值:n); for(i=0;ivexnumber;i+) scanf(%s,&ch); Graphi.data=ch; printf(请输入图中弧的起始点及权值:其格式为n); for(int k=0;kadjvex =end-1; p-w =duttem; Graphend-1.id +; p-nextedge =Graphbegin-1.firstedge ; Graphbegin-1.firstedge =p; int SearchMapPath(vexnode* Graph,int vexnumber,int

13、arcnumber) int totaltime=0;int m=0; int i,j,k,t; char sv100; int front,rear; int *topology_queue,*vl,*ve,*el,*ee; front=rear=-1; t=0; topology_queue=(int*)malloc(vexnumber*sizeof(int); vl=(int*)malloc(vexnumber*sizeof(int); ve=(int*)malloc(vexnumber*sizeof(int); el=(int*)malloc(arcnumber*sizeof(int)

14、; ee=(int*)malloc(arcnumber*sizeof(int); edgenode *p; for(i=0;ivexnumber;i+) vei=0; for(i=0;iadjvex ; Graphk.id -; if(vej+p-w vek) vek=vej+p-w ; if(Graphk.id =0) topology_queue+rear=k; p=p-nextedge ; if(mvexnumber) printf(n本程序所建立的图有回路不可计算出关键路径n); printf(将退出本程序n); return 0; totaltime=vevexnumber-1; f

15、or(i=0;i=0;i-) j=topology_queuei; p=Graphj.firstedge; while(p) k=p-adjvex ; if(vlk-p-w )w; p=p-nextedge; printf(| 起点 | 终点 | 最早开始时间 | 最迟开始时间 | 差值 | 是否为关键路径 n); i=0; for(j=0;jadjvex ; ee+i=vej; eli=vlk-p-w; printf(| %4c | %4c | %12d | %12d | %4d |,Graphj.data ,Graphk.data ,eei,eli,eli-eei); if(eli=eei

16、) printf( 此弧为关键活动 ); svt=Graphj.data;t+; printf(n); p=p-nextedge; printf(关键路径节点为:); svt=Graphvexnumber-1.data; for(i=0;i); printf(n); printf(关键路径长度为:%d个单位时间n,totaltime); return 1; void main( ) int vexnumber,arcnumber,totaltime=0; printf(请输入这个图中的节点数:); scanf(%d,&vexnumber); printf(请输入这个图中的弧数:); scanf

17、(%d,&arcnumber); vexnode* Graph=(vexnode*)malloc(vexnumber*sizeof(vexnode); CreateGraph(Graph,vexnumber,arcnumber); SearchMapPath(Graph,vexnumber,arcnumber); 沈阳航空工业学院课程设计报告课程设计总结:从这次给我的课程设计任务中我深刻地体会到了。任何事情并不是想我们想的那样简单和容易。只有扎扎时时的学习知识才能解决实际生活中的实际问题。从这次课设中也让我明白以后要多了解相关知识,更多的做一些实践动手活动,将知识运用到实际问题中。同时,增加自己的动手能力,这样才能便于我们更好的解决问题。为今后打下好的基础。当我编完程序后,我感到很欣喜,这毕竟是我的第一次课程设计任务。能完成让我感到什么叫做编程的快乐,什么叫做乐趣。督促我更加努力的学习我的专业课:计算机科学与技术。指导教师评语:指导教师(签字): 年 月 日课程设计成绩

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!