- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西北农林科技大学信息工程学院
C语言和数据结构实习报告
题 目: 关键路径问题
学 号 姓 名 专业班级 软件093 指导教师 实践日期 \
目 录
一、综合训练目的与要求 3
二、综合训练任务 3
三、总体设计 3
四、详细设计说明 4
五、调试与测试 7
六、实习日志 10
七、实习总结 12
八、附录:核心代码清单 12
一、综合训练目的与要求
本综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。本课综合训练的目的和任务:
1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握;
2. 掌握C语言编程和程序调试的基本技能;
3. 利用C语言进行基本的软件设计;
4. 掌握书写程序设计说明文档的能力;
5. 提高运用C语言、数据结构解决实际问题的能力。
二、综合训练任务
基本要求:
(1)对一个描述工程的AOE网,建立其存储结构;(注:数据的输入可以是键盘输入或文件输入两种方式)
(2)判断该AOE网是否能够顺利进行。
(3)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。(注:结果的输出可以是屏幕输出和文件输出两种方式)
三、总体设计
主流程图
四、详细设计说明
对于问题的分析:
由于在AOE-网中有些活动可以并行进行,所以完成工程的最短时间就是从开始点到完成点的最长路径的长度,所以路径长度最长的路径叫做关键路径。
求关键路径的算法:
(1)输入e条弧j,k,建立AOE-网的存储结构;
(2)从源点V0出发,令Ve[0]=0,按拓扑有序求其余各定点的最早发生时间Ve[i](1=i=n-1)。如果得到的拓扑有序序列中的顶点个数小于网中顶点数n,则说明网中存在环,不能求关键路径,算法终止;否则执行步骤(3)。
(3)从汇点Vn出发,令Vl[n-1]=Ve[n-1],按拓扑有序求其余各顶点的最迟发生时间Vl[i](n-2=i=2);
(4)根据各顶点的Ve和Vl值,求每条弧s的最早开始时间e(s)和最迟开始时间l(s).。若某条弧满足条件e(s)=l(s),则为关键活动。
如上所述,计算各顶点的Ve值是在拓扑排序的过程中进行的,需要对拓扑排序的算法作如下修改:
(a)在拓扑排序之前设初值,令 Ve[i]=0(0=i=n-1);
(b)在算法中增加一个计算Vj的直接后继Vk的最早发生时间的操作:若Ve[j]+dut(j,k)Ve[k],则 Ve[k]= Ve[j] +dut(j,k);
(c)为了能按逆拓扑有序序列的顺序计算各顶点的Vl值,需要记下在拓扑排序的过程中求得的拓扑有序序列,这需要在拓扑排序算法中,增设一个栈以记录拓扑有序序列,则在计算机求得各顶点的Ve值以后,从栈顶至栈底便为逆拓扑有序序列。
在程序末端要对程序进行改进,使其输入具有键盘输入和文件输入两种方式,输出也具有键盘输出和文件输出两种方式。
本程序所需要的结构体及宏定义如下:
#define OK 1
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAX_VERTEX_NUM 20 //最大顶点个数 图的
#define STACK_INIT_ZSIZE 100 //存储空间初始分配量 栈的
#define STACKINCREMENT 10 //存储空间分配增量 栈的
typedef int Status; //类型
typedef int SElemType;
typedef int VertexType;
typedef int InfoType;
//--------------------栈结构-------------------
typedef struct
{
SElemType *base; //在栈构造之前和销毁之后,base的值为NULL
SElemType *top; //栈顶元素
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack,*Stack;
//--------------------图结构-------------------
typedef struct ArcNode //表结点
{
int adjvex;
文档评论(0)