ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:232.35KB ,
资源ID:9151907      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9151907.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(工程规划问题数据结构课程设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

工程规划问题数据结构课程设计.docx

1、工程规划问题数据结构课程设计滁州学院课程设计报告课程名称: 数据结构 设计题目: 工程规划的设计与实现 系 别: 计算机科学与技术系 专 业: 网络工程 组 别: 第一组 起止日期: 2011年6月 1日2011年6月26日 指导教师: 刘士喜 计算机科学与技术系二九年制课程设计任务书课程设计题目工程规划的设计与实现组长史言学号2010211212班级网工2班系别计算机与科学技术专业 网络工程组员束 勇 2010211213 司石磊2010211214史仁兴 2010211211 史芳彬2010211210指导教师刘士喜课程设计目的为了解决在实际工程领域中的最短时间,对此该课程设计解决了对于某

2、个工程的关键活动以及最短时间。课程设计所需环境WINDOWS XP Microsoft Visual C+ 6.0课程设计任务要求根据该课程设计的目的,我们首先查阅了大量资料,做了充分的需求分析,完成了该课程的概要设计课程设计工作进度计划序号起止日期工 作 内 容分工情况16.1开会讨论课程设计,并进行小组内人员的分工史言对小组成员进行明确分工26.26.5讨论分析课程设计,具体分析史 言 束勇 史仁兴 司石磊 史芳彬36.66.10查阅相关资料,编写课程设计的前些部分司石磊 束 勇46.116.16课程设计的概要设计的编写及修改史芳彬 史仁兴56.176.22详细设计的编写及调试史 言 史仁

3、兴66.236.26最后的总结,心得。并将课程设计打印束勇 司石磊指导教师签字: 年 月 日教研室审核意见:教研室主任签字: 年 月 日目 录1. 引言 - 4 -2. 需求分析 - 4 -2.1工程 - 4 -2.2 AOE网 - 4 -2.2.1AOE网的定义 - 4 -2.2.2 AOE 网具有的性质 - 5 -2.2.3AOE网的应用 - 5 -2.3关键路径 - 5 -2.3.1关键路径的研究意义 : - 5 -2.4分析 - 6 -2.4.1问题描述 - 6 -2.4.2示例 - 6 -25基本要求 : - 7 -2.5.1具体要解决的问题 - 7 -2.5.2程序设计分析 - 7

4、 -2.6需求分析的目的: - 8 -3. 概要设计 - 8 -31算法分析: - 8 -32算法步骤: - 9 -3. 3函数的主要功能: - 9 -34数据结构: - 9 -3.4.1数据结构: - 9 -34. 2程序模块: - 10 -3. 4. 3程序流程: - 10 -4. 详细设计 - 12 -4.1求取关键路径 - 12 -4.2主程序建立 - 13 -5. 调试与操作说明 - 14 -5.1开始界面 - 14 -5.2进入求关键路径的系统 - 15 -5.3输入节点数和活动个数 - 16 -5.4输入某项目的信息(弧头,弧尾,权值)打印出关键路径 - 17 -5.5例如:如图

5、所示的图程序测试 - 18 -5.6回路测试 - 20 -6. 课程设计的总结和体会 - 21 -7. 致谢: - 21 -8. 参考文献: - 21 -9. 附录: - 21 -课程设计的主要内容1. 引言随着社会经济的飞速发展,尤其是在工程领域,发展迅速,而关键路径是从工程领域抽象出来的问题的求解方法。关键路径扮演了工程规划的指导者的重要角色,是一种非常重要的估算一项工程所需的最短时间的依据。2. 需求分析2.1工程我们通常把计划、施工过程、生产流程、程序流程等都当成一个工程。工程通常分为若干个称为“活动”的子工程。完成了这些“活动”,这个工程就可以完成了。 2.2AOE网2.2.1AOE

6、网的定义通常用AOE-网来表示工程。AOE-网是用顶点表示事件,弧表示活动,弧上的权值表示活动持续的时间的有向图叫AOE(Activity On Edge Network)网。AOE网常用于估算工程完成时间。例如: 图1 一个AOE网实例 图1 是一个网。其中有9个事件v1,v2,v9;11项活动a1,a2,a11。每个事件表示在它之前的活动已经完成,在它之后的活动可以开始。如 v1表示整个工程开始,v9 表示整个工程结束。V5表示活动,a4和a5已经完成,活动a7和a8可以开始。与每个活动相联系的权表示完成该活动所需的时间。如活动a1需要6天时间可以完成。2.2.2 AOE 网具有的性质只有

7、在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始。 只有在进入某一顶点的各有向边所代表的活动都已经结束,该顶点所代表的事件才能发生。 表示实际工程计划的AOE网应该是无环的,并且存在唯一的入度过为0的开始顶点和唯一的出度为0的完成顶点。2.2.3AOE网的应用AOE-网可以用来估算工程的完成时间。他可以使人们了解:研究某个工程至少需要多少时间?哪些活动是影响工程进度的关键?1.2.4 AOE网的设计步骤:以某一工程为蓝本,采用图的结构表示实际的工程计划的时间。 调查以分析和预测这个工程计划个阶段的时间。用调查的结果建立E网(Activity On Edge Network

8、),即边表示活动的网络,并用图的形式表示。 用图来存储这些信息。 用CreateGraphic();函数建立AOE图。 用SearchMapPath();函数求出最大路径,并打印出关键路径。 编写代码 测试2.3关键路径由于AOE-网中的有些活动可以并行进行,从开始点到各个顶点,以致从开始点到完成点的有向路径可能不止一条,这些路径的长度也可能不同。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。因此,完成工程所需的最短时间是从开始点到完成点的最长路径的长度,即在这条路径上的所有活动的持续时间之和.这条路径长度就叫做关键路径(Critical Path)

9、。2.3.1关键路径的研究意义 :关键路径可以很方便的让我们估算出某个工程最短的时间开销,以及这个工程中哪些活动,即哪些项目是主要的,是影响工程进度的关键,从而让我们对工程的实施作出更好的时间安排,并且可以分清主次,抓住核心工程,做到有的放矢。总的来说,正因为关键路径可以帮助我们对工程进行非常有必要的估算,让我们得以看清全局,作出更为优化的安排,所以可见关键路径的求出对一项工程而言是非常必要的。这亦是本次对关键路径求法的研究意义所在。2.4分析2.4.1问题描述为了规划和管理的方便,他们将一个工程分为若干个项目,每个项目都可以独立进行。所有项目都工作完毕时,整个工程也就完成了。每个项目都需要一

10、定的工作时间。工程最后总耗时是从第一个项目开始到最后一个项目结束的这段时间。各个项目之间可能存在也可以不存在相互制约关系。如果有制约关系,则可能是以下四种之一 (设两个项目分别为p和q): (1)SAS p q (p Sart After q Start,项目p在项目q开始之后才能开始) (2)FAS p q (p Finish After q Start,项目p在项目q开始之后才能结束) (3)SAF p q (p Sart After q Start,项目p在项目q结束之后才能开始) (4)FAF p q (p Finish After q Start,项目p在项目q结束之后才能结束) 如

11、果没有制约关系,则可同时进行。2.4.2示例例如:SAF 1 3表示项目1必须在项目3完成后才能开始。若项目3工作时间为3,起始时刻为2,则项目1最早在时刻5才能开始。 请你根据各个项目的工作时间及先后关系,找出一种安排工程的方案,使整个工程尽可能快的完成。 输入: 输入文件的第一行为项目总数N(1N100),设项目的编号依次为1,2,N。下面N行依次为完成每个项目所需的工作时间(每个项目占一行)。这个时间为不超过100的正整数。 接下来若干行是一些项目间先后次序关系的列表,每行的格式为: 其中:为SAS、FAS、SAF、FAF中的任意一个,“(”表示一个空格符。 整个文件以一个字母“”表示结

12、束(单独占一行)输出: 若问题有解,则输出文件有N行,依次输出项目1到项目N的最早开始时间(设整个工程从0时刻开始)。每行的格式为:(项目编号 最早开始时间)。若问题无解,则输出文只有一行,为一个正整数0。输入输出示例1:project .in3234SAF 2 1FAF 3 2project .out1 02 23 1输入输出示例2:project .in3111SAF 2 1SAF 3 2SAF 1 3 project .out0(1)选取建图的一种算法建立图,有邻接矩阵,邻接表,十字链表,邻接多重表等多种方法,要选取一种适当的方法建立图,才能提高算法效率,降低时间复杂度和空间复杂度。(2

13、)两个相邻顶点与它们之间的边表示活动,边上的数字表示活动延续的时间。对于给出的事件AOE网络,要求求出从起点到终点的所有路径,经分析、比较后找出长读最大的路径,从而得出求关键路径的算法,并给出计算机上机实现的源程序。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。25基本要求 :2.5.1具体要解决的问题将项目中的各项活动视为有一个时间属性的结点,从项目起点到终点进行排列; 用有方向的线段标出各结点的紧前活动和紧后活动的关系,使之成为一个有方向的网络图; 用正推法和逆推法计算出各个活动的最早开始时间,最晚开始时间,最早完工时间和最迟完工时间,并计算出各

14、个活动的时差; 找出所有时差为零的活动所组成的路线,即为关键路径; 2.5.2程序设计分析选取建图的一种算法建立图;选取邻接表的算法来建立图,是一种顺序+ 链式存储结构。用顺序表存放顶点,为每个顶点建立一个单链表,单链表中的结点表示依附于该顶点的边或以该顶点为尾的弧。两个相邻顶点与它们之间的边表示活动,边上的数字表示活动延续的时间参照该工程所化的AOE-网,求出从起点到终点的所有路径,然后通过拓扑排序和逆拓扑排序求出最早与最晚发生时间,找出长度最大的路径,从而求得关键路径,计算出完成工程的最短时间。 2.6需求分析的目的:在该部分,即需求分析中,根据设计题目的要求,充分地分析和理解问题,叙述系

15、统的功能要求,明确问题要求做什么,以及限制条件是什么。 程序所能达到的功能:通过输入所要构建的图的顶点数,弧数,创建图,并打印出来,对图进行拓扑排序,求得此图的最早发生时间和最迟发生时间,并求得关键活动和关键路径,打印出来。3. 概要设计31算法分析: 求关键路径必须在拓扑排序的前提下进行,有环图不能求关键路径;只有缩短关键活动的工期才有可能缩短工期;若一个关键活动不在所有的关键路径上,减少它并不能减少工期; 只有在不改变关键路径的前提下,缩短关键活动才能缩短整个工期。关键路径:从源点到汇点的路径长度最长的路径叫关键路径。活动开始的最早时间e(i);活动开始的最晚时间l(i);定义e(i)=l

16、(i)的活动叫关键活动;事件开始的最早时间ve(i);事件开始的最晚时间vl(i)。设活动ai由弧(即从顶点j到k)表示,其持续时间记为dut(),则: e(i)=ve(j) l(i)=vl(k)-dut() 求ve(i)和vl(j)分两步: 1.从ve(1)=0开始向前递推ve(j)=Max ve(i)+dut() T,2=j=n 其中,T是所有以j为弧头的弧的集合。 2.从vl(n)=ve(n)开始向后递推 vl(i)=Min vl(j)-dut() S,1=i=n-1 其中,S是所有以i为弧尾的弧的集合。 两个递推公式是在拓扑有序和逆拓扑有序的前提下进行。32算法步骤:输入e条弧,建立A

17、OE网的存储结构。从源点v1出发,令ve(1)=0,求 ve(j),2=j=n。从汇点vn出发,令vl(n)=ve(n),求 vl(i) 1=i=n-1。根据各顶点的ve和vl值,求每条弧s(活动)的最早开始时间e(s)和最晚开始时间l(s),其中e(s)=l(s)的为关键活动。3. 3函数的主要功能: 3. 3.1CreateGraphic( )函数:构建AOE网,for(scanf()逐个对图节点信息(包括两邻接点,权值)输入接收,并与分配存储空间。 3. 3. 2SearchMapPath( )函数: 寻找关键路径,构建栈用与储存拓扑排序序列,求得每个接点的相应最早发生时间、最迟完成时间

18、,关键事件的求取,并输出关键路径。 3. 3.3Seekkeyroot( )函数: 先使用库函数system(“cls”)清屏,scanf()对接点数的接收分配相应的存储空间,调用CreateGraphic()函数和SearchMapPath()函数。 3. 3. 4Main( )函数: 输出主屏信息判断进入关键路径的程序条件,swith()对条件进行选择。34数据结构: 34. 1数据结构:typedef struct node/边表结点 int adjvex; /邻接点编号int dut; /弧的信息 struct node *next; /下一条弧指针edgenode; typedef

19、struct /顶点表结点 int projectname;/顶点域 int id;/顶点的入度信息 edgenode *link; /边表头指针 vexnode; 34. 2程序模块: 求关键路径需要通过建立A0E网、计算关键路径和主程序这三个模块来共同完成,每一个都不可缺少,如图2所示:图2 求关键路径的步骤简图3. 4. 3程序流程:开始主函数运行,然后swith()函数进行对条件选择,再调用Seekkeyroot(),CreateGraphic和SearchMapPath函数进行运算,最后退出调试,如图3所示。 图3 求关键路径的程序流程图 4. 详细设计4.1求取关键路径利用AOE网

20、进行工程管理时,需解决的两个主要问题:其一,计算完成整个工程的最短工期;其二,确定关键路径,以找出哪些活动时影响工程进度的关键。因此须计算以下几点: 事件的最早发生时间vek;事件最迟发生时间vlk;活动最早开始时间eei;活动的最迟开始时间eli;计算其过程必须分别在拓扑有序和逆拓扑有序的前提下进行。也就说,vek必须在事件vk所有前驱的最早发生的时间求得之后才能确定。因此,可以在拓扑排序的基础上计算vek和vlk。由此得到求解关键路径的方法:首先输入e条有向边,建立AOE网的邻接表存储结构;然后从始点出发,令事件的最早发生时间为0,按拓扑有序求其余各顶点时间的最早发生时间vek;(代码如下

21、) 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值是在拓扑排序的过程中进行的,因此需一个队列来记录拓扑排序,如果顶点的入度为0,则该顶点从队尾进入队列,拓扑排序时,从队头出队列。

22、if(Graphk.id =0) topology_queue+rear=k; p=p-nextedge ; 4.2主程序建立该部分主要是对所建立的函数的调用。包括:建立图的函数CreateGraph( );计算关键路径的函数SearchMapPath ( );最后程序结束。这样安排可以增强程序的可读性,使程序便于理解,也便于日后的对程序的维护和修改等操作。首先,建立一个边的信息结构体,包括邻接点的编号和弧的信息以及下一条指针的结点等信息。typedef struct node/边表结点 int adjvex; /邻接点编号 int dut; /弧的信息struct node *next; /

23、下一条弧指针edgenode; 然后,再建立顶点的信息结构体,其中包括表结点、顶点域、顶点的入度等信息。typedef struct /顶点表结点 int projectname;/顶点域 int id;/顶点的入度信息 edgenode *link; /边表头指针vexnode;接着,根据这些信息建立一个有向图,在创建过程中,需要注意:先是将各定点的入度设为零,然后每加一个入度就加一,如果是减得话就是输入终点,还有就是正确输入弧的信息要和格式一样。部分程序段如下:void CreateGraphic(vexnode* Graphicmap,int projectnumber,int acti

24、venumber)/创建图 int begin,end,duttem; /分别代表弧的头节点,尾节点,活动时间 edgenode *p;/ 边表头指针 for(int i=0;iprojectnumber;i+) Graphicmapi.projectname=i;/顶点的命名按0,1,2,3. Graphicmapi.id =0;/顶点的信息的度数均赋为零 Graphicmapi.link =NULL; printf(n); printf(请输入某项目的信息,并请用整形数字表示(格式:弧头,弧尾,权值):n); printf(例如:输入1,2,4 即代表结点1与4之间的活动需要4个时间单位。

25、n); printf(n); for(int k=0;kadjvex =end-1;/因为是从零开始记的,如要减一,就是让终点插入到邻接表内 p-dut =duttem; /该弧的活动时间为duttem Graphicmapend-1.id +; /入度加一 p-next =Graphicmapbegin-1.link ; Graphicmapbegin-1.link =p;/让下一个节点作为下一插入节点的前驱节点 下一步就是根据建立的图求关键活动、编写主函数,进行求解,调试。源代码见附录。5. 调试与操作说明按照要求输入一组关于无循环有向帯权图所有信息。5.1开始界面提示界面会显示“欢迎进入

26、秋关键路径算法程序”,其中s(start)表示开始输入工程的节点数据并求出关键路径,e(exit)表示退出具体如图3所示。图3 开始界面5.2进入求关键路径的系统例如输入s提示 输入符合标准,欢迎进入求关键路径的系统!请输入这个项目的AOE-网的节点数:图 4 输入节点5.3输入节点数和活动个数提示请输入这个项目的AOE-网的节点数;请输入这个项目的AOE-网的活动个数;例如节点数3 ,活动的个数3,具体如图5所示。图 5 输入活动个数5.4输入某项目信息并打印关键路径 例如输入1,2,4 即代表1与4之间的活动需要4个时间单位,打印出关键路径:1,2,4 1,3,5 2,3,6,如图6所示。

27、图 6 输入权值5.5回路测试本程序所建立的图有回路不可计算出关键路径,将退出本程序。 整个工程所用的最短时间为:0个单位时间,如图7所示。图 7 回路测试6. 课程设计的总结和体会该课程设计旨在解决当今工程领域中的最短时间以及关键活动问题。在该课程设计中,用到了AOE网的性质、求解和拓扑排序等方法,进而求得最短时间和关键活动。该课程设计包括引言、需求分析、概要设计、详细设计、调试与操作说明等几大部分。在各个部分中,本次课程设计中简明扼要的阐述了该部分的内容及功能。为该部分的理解及详细设计中的代码的理解都起到了重要的作用。另外,在调试与操作说明这一部分中,调试了多组数据,为程序的正确奠定了基础

28、。在经过了几次调试后,验证了该程序的正确性。因此,此次工程规划的设计与实现课程设计是有效的。7. 致谢:感谢一年来刘老师的教育,让我们知道了如何做一个课程设计,同时感谢刘老师给我们提出的宝贵的意见。另外非常感谢在此次课程设计中帮助我们小组的同学们。8. 参考文献:1 严蔚敏,吴伟民.数据结构M.北京: 清华大学出版社,2006.谭浩强. C程序设计(第二版): 清华大学出版社,2006胡学钢.数据结构(C语言版): 高等教育出版社, 20089. 附录:源程序清单#include#include#include#include typedef struct node/边表结点 int adjvex; /邻接点编号 int dut; /弧的信息 struct node *next; /下一条弧指针edgenode;typedef struct /顶点表结点 int projectname;/顶点域 int id;/顶点的入度信息 edgenode *link;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1