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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

关键路径算法课程设计Word文件下载.docx

1、1.2 题目理解与功能分析该题实质要求用数据结构中的图形知识编写一个求无循环有向帯权图中从起点到终点所有路径,经分析、比较求出长度最大路径,从而求出关键路径。通常我们用有向图表示一个工程。在这种有向图中,用顶点表示活动,用有向边表示活动Vi必须先于活动Vj进行。如果在这种图中用有向边表示一个工程中的各项活动(ACTIVITY),用有向边上的权值表示活动的持续时间(DURATION),用顶点表示事件(EVENT),则这种的有向图叫做用边表示活动的网络,简称AOE网络。在AOE网络中,从源点到各个顶点,可能不止一条。这些路径的长度也可能不同。不同路径所需的时间虽然不同,但只有各条路径上所有活动都完

2、成了,这个工程才算完成。因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和。这条路径长度就叫做关键路径(critical path)。 程序所要达到的功能:输入并建立AOE网;输出关键活动并求出这个工程的关键路径;求出完成这个关键路径的最少时间并输出,该程序结束。第二章 概要设计2.1 设计思路基本设计思路:(1) 以某一个求无循环有向帯权图蓝本。(2) 观察并记录这个图中每个弧的起始点及权值。 (3) 用记录的结果建立E网,即边表示活动的网络,并用图的形式表示。(4) 用领接表来存储图这些信息。 (5) 用CreateGraph( )函数建立A

3、OE图。(6) 用SearchMapPath ( )函数求出最大路径,并打印出关键路径。(7) 编写代码并测试。2.2系统模块图 图2-1系统模块图第三章 详细设计3.1 图存储结构的建立1. 先建立邻接表的存储单元,为建立邻接表做准备。为图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向图是以vi为尾的弧)。每个结点由3个域组成,其中邻接域(adjvex)指示与顶点vi邻接的点在图中的位置,链域(nextedge)指示下一条边或弧的结点,权值域(W)存储边或弧的权值大小。在表头结点除了设有链域(firstedge)指向链表中第一个结点之外,还设有存储顶点v或其他

4、有关的数据域(data)和存储顶点入度的域(id)(代码如下)。 typedef struct node int adjvex; int 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;w

5、=duttem; Graphend-1.id +;nextedge =Graphbegin-1.firstedge ; Graphbegin-1.firstedge =p;3.2 求取关键路径利用AOE网进行工程管理时,需解决的两个主要问题:其一,计算完成整个工程的最短工期;其二,确定关键路径,以找出哪些活动时影响工程进度的关键。因此须计算以下几点:(1)事件的最早发生时间vek;(2)事件最迟发生时间vlk;(3)活动最早开始时间eei;(4)活动的最迟开始时间eli;计算其过程必须分别在拓扑有序和逆拓扑有序的前提下进行。也就说,vek必须在事件vk所有前驱的最早发生的时间求得之后才能确定。

6、因此,可以在拓扑排序的基础上计算vek和vlk。由此得到求解关键路径的方法:首先输入e条有向边,建立AOE网的邻接表存储结构;然后从始点出发,令事件的最早发生时间为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

7、) printf( 此弧为关键活动 ); 同时,为计算各顶点事件的ve值是在拓扑排序的过程中进行的,因此需一个队列来记录拓扑排序,如果顶点的入度为0,则该顶点从队尾进入队列,拓扑排序时,从队头出队列。 if(Graphk.id =0) topology_queue+rear=k; p=p-nextedge ;3.3 主程序建立该部分主要是对所建立的函数的调用。包括:建立图的函数CreateGraph( );计算关键路径的函数SearchMapPath ( );最后程序结束。这样安排可以增强程序的可读性,是程序便于理解,也便于日后的对程序的维护和修改等操作。第四章 实验结果按照要求输入一组关于无

8、循环有向帯权图所有信息。依次执行程序每一步,最后结束该程序。程序运行如下图: 图4-1运行结果参考文献1 严蔚敏编.数据结构(C语言版).北京: 清华大学出版社,1997.22 谭浩强著.C语言程序设计(第二版).北京: 清华大出版社,2001.33 夏克俭编著.数据结构.北京: 国防工业出版社,2000.74 彭勃.数据结构.北京: 电子工业出版社,2007.65 宜晨编著.Visual C+5.0实用培训教程.北京:电子工业出版社,1998.56 崔武子.C语言程序设计实践教程.北京:清华大出版社, 2006.17 庞振平.计算机程序设计基础.广州: 华南理工出版社,2002.9附 录(程

9、序清单)#includestdlib.h int adjvex; struct node *nextedge; char data; int id; edgenode *firstedge;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.firstedge =NULL; printf(请输入这个图中的各个顶点的值:n for(i=0;i+)

10、%sch); Graphi.data=ch; 请输入图中弧的起始点及权值:其格式为 int SearchMapPath(vexnode* Graph,int vexnumber,int 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(vexnu

11、mber*sizeof(int); ve=(int*)malloc(vexnumber*sizeof(int); el=(int*)malloc(arcnumber*sizeof(int); ee=(int*)malloc(arcnumber*sizeof(int);i+) vei=0; if(Graphi.id=0) topology_queue+rear=i; m+; while(front!=rear) front+; j=topology_queuefront; m+; p=Graphj.firstedge ; k=p- Graphk.id -; if(vej+p- if(Graphk

12、.id =0) topology_queue+rear=k; if(m=0;i-) j=topology_queuei; p=Graphj.firstedge; if(vlk-p-w )w;nextedge; | 起点 | 终点 | 最早开始时间 | 最迟开始时间 | 差值 | 是否为关键路径 n i=0; for(j=0;j| %4c | %4c | %12d | %12d | %4d |,Graphj.data ,Graphk.data ,eei,eli,eli-eei); if(eli=eei) svt=Graphj.data;t+;关键路径节点为: svt=Graphvexnumber

13、-1.data;=t;%c,svi); if(svi!=Graphvexnumber-1.data) printf(-关键路径长度为:%d个单位时间n,totaltime); return 1; void main( ) int vexnumber,arcnumber,totaltime=0;请输入这个图中的节点数:%dvexnumber);请输入这个图中的弧数:arcnumber); vexnode* Graph=(vexnode*)malloc(vexnumber*sizeof(vexnode); CreateGraph(Graph,vexnumber,arcnumber); Search

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

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

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