数据结构毕业课程设计报告—关键路径
数据结构第19讲_关键路径与最短路径_C

数据结构第19讲_关键路径与最短路径_C 在数据结构的学习过程中,我们经常会遇到需要寻找最短路径的问题。
最短路径问题是指在图中寻找连接两个顶点之间最短路线的问题。
在实际生活中,最短路径问题广泛应用于交通、通信等领域。
在本篇文章中,我们将介绍关键路径和最短路径的概念,以及它们在实际问题中的应用。
首先,让我们来介绍关键路径。
关键路径是指在项目管理中,连接起始点和终止点的最长路径,也是项目完成所需要的最短时间。
关键路径可以通过计算活动的最早开始时间(EST)和最晚开始时间(LST)来确定。
活动的EST是指在没有任何限制条件下,活动可以最早开始的时间;而LST则是指在不影响项目完成时间的前提下,活动可以最晚开始的时间。
关键路径的长度等于项目的最早完成时间和最晚完成时间相等的活动的持续时间之和。
通过确定关键路径,我们可以优化项目进度,提高项目的整体效率。
接下来,让我们来介绍最短路径。
最短路径是指在图中寻找连接两个顶点之间最短路线的问题。
最短路径可以通过使用一些经典的算法来解决,例如迪杰斯特拉算法和弗洛伊德算法。
迪杰斯特拉算法是一种贪心算法,通过计算出从起点到其他顶点的最短路径,然后逐步扩展路径长度来逐步求解最短路径问题。
弗洛伊德算法是一种动态规划算法,通过构建一个关于各个顶点之间最短路径长度的矩阵来求解最短路径问题。
最短路径问题在实际生活中具有广泛应用,例如在地图导航中,我们需要找到从起点到目的地的最短路线;在网络通信中,我们需要找到网络中两个节点之间传输数据的最短路径。
在本篇文章中,我们介绍了关键路径和最短路径的概念,以及它们在实际问题中的应用。
关键路径用于确定项目完成所需的最短时间,而最短路径用于寻找连接两个顶点之间最短路线的问题。
这些概念都是数据结构中的重要内容,对于我们理解和解决实际问题具有重要意义。
关键路径_数据结构(C语言)_[共3页]
![关键路径_数据结构(C语言)_[共3页]](https://img.taocdn.com/s3/m/732cee4e51e79b8969022634.png)
第9章图151 动a0需要的时间是6个单位时间(天/时/分)。
图9.16 AOE网络9.5.2 关键路径与AOV网络不同,AOE网常用于工程时间的估算,主要研究以下两方面问题。
(1)整个工程至少需要多少时间;(2)哪些活动是影响工程进度的关键。
关键路径算法是解决这些问题的一种方法。
所谓关键路径,是指AOE网络中,从开始顶点到完成顶点的最长路径。
完成工程所需的最短时间是关键路径的长度,也就是关键路径上各边的权之和。
关键路径上的活动称为关键活动。
关键活动是影响整个工程进度的关键,如果这些活动不能按期完成,将会影响整个工程的进度。
图9.16中,关键路径是(v0,v1,v4,v7,v8),此路径上的关键活动为a0,a3,a7,a10,关键路径长度为19。
这就是说,整个工程至少需要19个单位时间才能完成。
为确定关键路径,先假定有一个包含n个事件和e个活动的AOE网,源点是事件v0,汇点是事件v n−1,且定义以下四个相关的变量。
(1)事件v i的可能的最早发生时间earliest(i):是从开始顶点v0到顶点v i的最长路径的长度。
例如,图9.16中,事件v4的可能的最早发生时间是v0到顶点v4的最长路径(v0,v1,v4),其长度为7,所以earliest(4)=7。
同理可求得,earliest(5)= 7,earliest(8)=19。
(2)事件vi的允许的最迟发生时间latest(i):是在不影响工期的条件下,事件v i允许的最晚发生时间,等于earliest(n−1)减去从v i到v n−1的最长路径的长度。
例如,latest(4)= earliest(8)−(8+4)=19−(8+4)=7。
同理可求得,latest(5)= earliest(8)−(4+4)=11,latest(7)=earliest(8)−4=19−4=15。
(3)活动ak可能的最早开始时间early(k):设活动a k关联的边为<v i,v j>,则early(k)=earliest(i)。
关键路径问题

#include <process.h>
typedef struct node//边表结点
{
int adjvex; //邻接点编号
int dut; //弧的信息
struct node *next; //下一条弧指针
}edgenode;
typedef struct //顶点表结点
void seekkeyroot()//求关键路径的主函数
{
int projectnumber,activenumber,totaltime=0;
printf("\n");
printf("输入符合标准,欢迎进入求关键路径的系统!\n");
printf("\n");
printf("请输入这个项目的AOE-网的节点数: ");
4)找出所有时差为零的活动所组成的路线,即为关键路径;
三、概要设计
算法分析:
(1)求关键路径必须在拓扑排序的前提下进行,有环图不能求关键路径;
(2)只有缩短关键活动的工期才有可能缩短工期;
(3)若一个关键活动不在所有的关键路径上,减少它并不能减少工期;
(4)只有在不改变关键路径的前提下,缩短关键活动才能缩短整个工期。
p->dut =duttem; //该弧的活动时间为duttem
Graphicmap[end-1].id ++; //入度加一
p->next =Graphicmap[begin-1].link ;
Graphicmap[begin-1].link =p;//让下一个节点作为下一插入节点的前驱节点
数据结构课程设计报告总结

数据结构课程设计报告总结一、背景与目的数据结构是计算机科学中的一门核心课程,它涉及到如何有效地组织、存储和处理数据。
本次课程设计的目的是通过实际项目,加深对数据结构基本概念和原理的理解,提高解决实际问题的能力。
二、项目内容与实现本次课程设计,我们选择了“学生信息管理系统”作为项目主题。
该系统需要存储和管理学生信息,包括学号、姓名、年龄、成绩等。
为了满足这些需求,我们采用了多种数据结构,如数组、链表、栈、队列和二叉搜索树等。
在实现过程中,我们首先定义了学生类,包含各种属性。
然后,我们使用数组来存储学生信息。
为了方便查找,我们采用二叉搜索树对学生信息进行排序。
此外,我们还实现了添加、删除、查找和修改学生信息的功能。
三、遇到的问题与解决方案在实现过程中,我们遇到了以下几个问题:1. 如何在O(log n)的时间内查找学生信息?解决方案:我们采用了二叉搜索树来存储学生信息,从而实现了在O(log n)的时间内查找学生信息。
2. 如何有效地实现对学生信息的批量修改?解决方案:我们采用链表作为底层数据结构,对学生信息进行动态管理。
当我们需要修改大量学生信息时,只需遍历链表,修改对应节点的值即可。
3. 如何处理大量数据的存储和查询?解决方案:我们采用数据库作为存储系统,将学生信息存储在数据库中。
通过编写SQL语句,我们可以方便地对学生信息进行查询和修改。
四、总结与展望通过本次课程设计,我们不仅加深了对数据结构基本概念和原理的理解,还提高了解决实际问题的能力。
在实现过程中,我们学会了如何将理论知识应用到实际项目中,也意识到了数据结构在软件开发中的重要性。
展望未来,我们将继续深入学习数据结构相关知识,努力提高自己的编程能力和算法水平。
同时,我们也希望能够将所学的数据结构知识应用到更多的实际项目中,为软件开发做出更大的贡献。
关键路径问题

《数据结构》课程设计题目关键路径问题院系计算机系年级班级2016计科(嵌入)学生姓名陈银学号***********学期2017-2018(二)任课教师黄群1引言2需求分析2.1问题描述2.2 基本要求2.3目的3 概要设计3.1数据类型3.2程序流程图4 详细设计4.1创建图的函数4.2求关键路径5关键路径测试6课程设计总结与体会7参考文献1 引言当一项工程分为多个子工程时,需要确定这么子过程的次序问题,还需要计算整个工程的时间,确定哪些活动是影响工程进度的关键,为按时或者提前完成整个工程提供保证,这就是关键路径的问题。
关键路径问题相应的网称为AOE网,其中:顶点表示事件,边表示活动,边得权表示活动持续时间,AOE网可以用来估算工程完成的时间。
2 需求分析2.1问题描述(1)选择建图方法有:涉及邻接矩阵,邻接表,十字链表,邻接多重等多种方法,要选择一种适当的方法建立图,提高算法效率,降低时间复杂度和空间复杂度。
(2)两个相邻顶点与它们之间的边表示活动,边上的数据表示活动延续的时间。
对于给出的事件AOE网络。
要求求出从起点到终点的所有路径,经分析,比较后找出长读最大的路径,从而得出关键路径的算法,并给出计算机上机实现的源程序。
完成不同路径的活动所需时间不同,但路径各条上所有活动都完成,这个工程才算完成。
2.2基本要求1选择一种算法建立图:选择邻接表算法,是一种顺序+链式存储结构。
用顺序表存放顶点,为每个顶点建立一个单链表,单链表中的结点表示该顶点的边或以该顶点为尾的弧。
2两个相邻顶点与它们之间边表示活动,边上的数字表示活动时间,求出从起点到终点的所有路径,然后通过拓扑排序和逆拓扑排序求出最早与最晚发生时间,找出长度最大的路径,从而求得关键路径。
2.3目的通过输入所要构造的图顶点数,弧数,创建图,并打印出来,对图进行拓扑排序,求得此图最早发生时间和最迟发生时间,并求得关键活动和关键路径。
3 概要设计求关键路径必须在拓扑排序的前提下,有环图不能求关键路径,只能减少关键活动工期,只有在不改变关键路径的前提下,减少关键活动才能减少整个工期。
数据结构课程设计之全国铁路最佳路径问题

##大学数据结构课程设计报告题目:全国铁路运输网最佳经由问题院(系): 计算机工程学院学生姓名:班级:学号:起迄日期: 2011/6/20至2011/7/01指导教师:2010—2011年度第 2 学期一、需求分析1.问题描述:这是上海铁路局目前仍在使用的行包托运软件中的一部分内部算法。
该题目采用1995年年底我国铁路运输网的真实数据进行编程和运行验证。
铁路运输网络中由铁路线和火车站的两个主要概念,譬如:1号铁路线表示京广线,2号铁路线表示京沪线等。
铁路线对象包括铁路线编号,铁路线名称,起始站编号,终点站编号,该铁路线长度,通行标志(00B客货运禁行,01B货运通行专线,10B客运通行专线,11B客货运通行)。
火车站对象包括所属铁路线编号,车站代码,车站名,车站简称,离该铁路线起点站路程及终点站路程。
2.基本功能(1)查询某站所属的铁路线(2)要求具备新增铁路线的管理功能(3)要求具备新增车站的管理功能(4)针对客运,货运情况能计算任何一个起始车站到任何一个终点站之间的最短路径。
并且要求能够显示出该最短路径的各个火车站的经由顺序3.输入输出初始数据是从views.txt、lines.txt、ways.txt三个文件中读入,在读入数据后,用户可以根据选项选择相应的功能,不同的功能有不同的数据输入/输出,比如:查询的功能是要求输入要查询的站的名称,然后输出是该站的相关信息;查询最短路径的功能则是输入起点站、终点站的名称,,输出则是该的路线距离和经由站等二、概要设计1.设计思路:核心问题:求最短路径(选址的要求就是超市到各单位权值之和最少)数据模型(逻辑结构):带权有向图 (权值计算: 距离*频度)2.数据结构设计:存储结构:本程序采用的是文件进行数据的存储,所以才用的是顺序存储结构,如要添加数据,直接在文件里面进行操作就行。
如下为抽象数据类型定义的模板及抽象数据类型线性表的定义如下:ADT List{数据对象:D={ai| ai ∈ElemSet,i=1,2,3……,n,n≥0}数据关系:R1={<ai-1,ai>| ai-1,ai ∈D,i=1,2,3,……,n}基本操作:void readviews()初始条件:views.txt已经存在。
关键路径实验报告
}
cout<<"关键路径为:"<<endl;
for(j = 0;j<algraph.vexnum;j++)
//求ee el和关键活动(同上)
{
for(p = algraph.vertices[j].firstarc;p;p = p->nextarc)
{
k = p->adjvex;
dut = *(p->info);
2、算法设计
源程序:
template <class T>
bool ALGraph<T>::TopologicalOrder(SeqStack<int> &t)
//求各顶点事件的最早发生时间ve
{
int j,k,count,indegree[MAX_VERTEX_NUM];
SeqStack<int> s;
count = 0;
for(j = 0;j<algraph.vexnum;j++)
{
ve[j] = 0;
}
while(!s.IsEmpty())
//S非空
{
s.Pop(j);
t.Push(j); count++; //j号顶点入T栈并计数
for(p = algraph.vertices[j].firstarc;p;p = p->nextarc)
1)画出运行程序中的图。
aቤተ መጻሕፍቲ ባይዱ
b
c
1 1d
e2
2)分析辅助变量的值。
答:j k dut ee e1 tag
最短路径_数据结构课程设计报告
最短路径_数据结构课程设计报告第一篇:最短路径_数据结构课程设计报告数据结构课程设计《数据结构》课程设计报告设计题目:____医院选址____________ 姓名:__________________ 学号:________________ 专业:___________院系:____________班级:_________________ 指导教师:_________________年 1月 3 日数据结构课程设计一、问题描述(1)题目内容:有n个村庄,现要从这n个村庄中选择一个村庄新建一所医院,使其余的村庄到这所医院的距离总和来说较短。
(n>=5)(2)基本要求:(3)可以输出每一对点间的路径长度;然后选取偏心度,最小的偏心度即为所求。
二、需求分析(4)本程序的功能包括找出每一对点间的路径长度。
(5)然后算出每一对点的偏心度。
(6)其中最小的偏心度即为所求。
三、概要设计操作集合:(7)public:MGraph(DataType a[],int b[][MaxSize],int n,int e);//初始化邻接矩阵和路径(8)void Floyd();//弗洛伊德算法的实现(9)void getE();//获取偏心度(10)void showdist();//把每一对顶点之间的路径权值show出来(11)~MGraph(){} //类的析构函数四、数据结构设计(1)DataType vertex[MaxSize];//存放图中顶点的数组(2)intarc[MaxSize][MaxSize];//存放图中边的数组(3)string path[MaxSize][MaxSize];//存放从Vi到Vj的最短路径,初始为//path[i][j]=“ViVj”(4)int dist[MaxSize][MaxSize];//存放求得的最短路径长度(5)int vertexNum, arcNum;//图的顶点数和边数(6)int E[MaxSize][2];//获取最小偏心度和该顶点五、算法设计1.算法分析1)对带权有向图的,调用Floyd算法,对每一对顶点间的最短路径长度的矩阵;2)对最短路径长度矩阵的每列求最大值,即得到各点的偏心度;3)具有最小偏心度的顶点即为所求。
数据结构课程设计报告(最终版)
数据结构课程设计报告
题目:
组长:
成员:
成员:
成员:
成员:
成员:
指导教师:
年月日
一、课程设计题目:
二、问题定义:(由教师指定)
三、需求分析
以明确的无歧义的陈述说明课程设计的任务,强调的是程序要做什么?并明确规定:
1、输入的形式和输入值的范围;
2、输出的形式;
3、程序所能达到的功能;
4、算法涉及的基本理论分析:比如对文件压缩,算法用到了
Huffman树,就要从理论上对文件压缩的几种方式、Huffman树的定义、Huffman编码的原理、解码的过程等进行分析。
5、题目研究和实现的价值。
四、算法设计
1、概要设计
阐述说明本算法中用到的所有数据结构的定义及其含义、主程序的流程以及各程序模块之间的层次(调用)关系。
3.详细设计
(1)实现概要设计中定义的所有数据类型;
(2)所有函数的接口描述;
(3)所有函数的算法描述(只需要写出伪码算法);
(3)对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序),可采用流程图、N – S 图或PAD图进行描述
(4)画出函数的调用关系图。
五、算法实现
以附件形式
六、软件测试
这里的测试主要是基于功能的黑盒测试,所以首先提出测试的功能点,然后给出测试数据(包括正确的输入及其输出结果和含有错误的输入及其输出结果。
)
要求在附件里给出软件的基本数据和测试数据。
七、技术讨论(可选)
八、收获与体会
九、软件运行的部分截图及说明。
数据结构课程设计报告 (4)
数据结构课程设计报告1、引言数据结构是计算机科学中的重要基础课程,它研究如何组织和管理数据以及数据之间的关系。
掌握良好的数据结构对于程序设计和算法的实现至关重要。
本报告将介绍在数据结构课程中完成的设计项目,主要包括设计目标、设计思路、实现细节以及结果分析等内容。
2、设计目标本设计项目的目标是实现一个简单的学生成绩管理系统,该系统能够实现对学生的基本信息以及各门课程成绩的管理和查询。
设计的关键要求如下:1.能够添加学生信息并关联其各门课程成绩;2.能够根据学号查询学生信息以及其各门课程成绩;3.能够计算学生的总成绩和平均成绩;4.能够实现对学生信息和成绩的修改和删除操作。
3、设计思路为了实现上述设计目标,我们采用了链表数据结构来保存学生信息和成绩。
链表的节点用来存储学生的基本信息,如学号、姓名、性别等,同时还包含一个指向课程成绩链表的指针。
课程成绩链表的节点用来存储每门课程的成绩。
在添加学生信息时,我们按照学号的顺序将学生节点插入到链表中。
通过遍历链表,我们可以根据学号查找到对应的学生节点,并进一步查找到该学生的课程成绩链表。
对于查询操作,我们可以通过遍历链表找到匹配的学生节点,然后输出其基本信息和课程成绩。
计算总成绩和平均成绩可以通过遍历课程成绩链表并累加每门课程的成绩来实现。
修改和删除操作可以通过遍历链表找到匹配的学生节点,并进行相应的修改或删除操作。
4、实现细节该学生成绩管理系统的具体实现细节如下:•使用C++编程语言实现;•采用链表数据结构,分别设计了学生信息链表和课程成绩链表;•学生信息链表的节点包括学号、姓名、性别等信息,以及指向课程成绩链表的指针;•课程成绩链表的节点包括课程名称和成绩信息;•提供了添加学生信息、添加课程成绩、查询学生信息、查询课程成绩、计算总成绩和平均成绩等功能;•通过遍历链表实现对学生信息和成绩的修改和删除操作。
5、结果分析经过测试和验证,该学生成绩管理系统能够满足设计目标,并能够正常运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
- 1 - (此文档为word格式,下载后您可任意编辑修改!) 《算法与数据结构》课程设计 题目:关键路径
院、 系: 学科专业: 姓 名: 学 号: 指导教师: 年 月 日 - 1 - 数据结构课程设计报告
摘 要 关键路径是我们估算某些工程非常有用,是一种非常重要的估算一项工程所需的最短时间的依据。本文对如何求一个工程的关键路径做了详细的说明,包括需求分析、概要设计、详细设计、测试与分析、总结、源程序清单。 首先,做了需求分析,解释了什么是关键路径,并指出它在估算工程中的重要作用。然后给出求关键路径的概要设计,包括程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序模块之间的层次(调用)关系。 在概要设计的基础上,又给出了详细的算法设计,实现概要设计中定义的所有函数,对每个函数写出核心算法,并画出了流程图。然后对编码进行了测试与分析(并在最后附上C语言编写的程序代码)。最后对整个设计过程进行了总结„„ 关键词:关键路径;抽象数据类型;程序模块;核心算法;流程图。
目 录
摘要……………………………………1 1 绪论 ……………………………………………3 1.1前言 ………………………………………………………3 1.2研究意义 ……………………………………………………………3 1.3结构安排 ……………………………………………………………3 2 需求分析 ……………………………………………5 2.1问题描述 ……………………………………………………………5 2.2基本要求 ……………………………………………………………5 2.3目的 ……………………………………………………………5 3概要设计 ……………………………………………7 3.1算法分析 ……………………………………………………………7 3.2算法步骤 ……………………………………………………………7 3.3数据结构……………………………………………………………8
3.3.1数据结构 ……………………………………………………………8
3.3.2程序模块 ……………………………………………………………8 3.3.3各模块间的调用关系……………………………………………………………9 4详细设计 ……………………………………………10 4.1主要函数的核心代码……………………………………………………………10 4.2程序流程图……………………………………………………………10 5测试 ……………………………………………11 6总结 ……………………………………………16 参考文献………………………………………………………………18 附录:原程序清单…………………………………………………………………19
1绪论 1.1前言 :
我们通常把计划、施工过程、生产流程、程序流程等都当成一个工程。工程通常分为若干个称为“活动”的子工程。完成了这些“活动”,这个工程就可以完成了。 我们通常用AOE-网来表示工程。AOE-网是一个带权的有向无环图,其中,顶点表示事件(EVENT),弧表示活动,权表示活动持续的时间。 AOE-网可以用来估算工程的完成时间。他可以使人们了解: 1. 研究某个工程至少需要多少时间? 2. 哪些活动是影响工程进度的关键? 由于AOE-网中的有些活动可以并行进行,从开始点到各个顶点,以致从开始点到完成点的有向路径可能不止一条,这些路径的长度也可能不同。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。因此,完成工程所需的最短时间是从开始点到完成点的最长路径的长度,即在这条路径上的所有活动的持续时间之和.这条路径长度就叫做关键路径(Critical Path)。 1.2研究意义 :
关键路径可以很方便的让我们估算出某个工程最短的时间开销,以及这个工程中哪些活动,即哪些项目是主要的,是影响工程进度的关键,从而让我们对工程的实施作出更好的时间安排,并且可以分清主次,抓住核心工程,做到有的放矢。 总的来说,正因为关键路径可以帮助我们对工程进行非常有必要的估算,让我们得以看清全局,作出更为优化的安排,所以可见关键路径 的求出对一项工程而言是非常必要的。这亦是本次对关键路径求法的研究意义所在。 1.3结构安排 :
第一章绪论介绍了研究背景以及研究意义。 第二章需求分析介绍了问题描述以及基本要求,和这次课程设计所需达到的目的。 第三章概要设计主要介绍了求关键路径的算法分析,算法步骤,和数据结构,其中数 据结构包括了基本的抽象数据结构,所要用到的函数模块,以及各模块之间的调用关系。 第四章详细设计介绍了主要函数及其核心代码,以及程序流程图。 第五章对程序代码进行了测试。 第六章对这次数据结构课程设计进行了总结。 参考文献。 附录:原程序清单。 2 需求分析 2.1问题描述 :
(1)选取建图的一种算法建立图,有邻接矩阵,邻接表,十字链表,邻接多重表等多种方法,要选取一种适当的方法建立图,才能提高算法效率,降低时间复杂度和空间复杂度。 (2)两个相邻顶点与它们之间的边表示活动,边上的数字表示活动延续的时间。对于给出的事件AOE网络,要求求出从起点到终点的所有路径,经分析、比较后找出长读最大的路径,从而得出求关键路径的算法,并给出计算机上机实现的源程序。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。 具体要解决的问题有如下四个: 1) 将项目中的各项活动视为有一个时间属性的结点,从项目起点到终点进行排列; 2) 用有方向的线段标出各结点的紧前活动和紧后活动的关系,使之成为一个有方向的网络图; 3) 用正推法和逆推法计算出各个活动的最早开始时间,最晚开始时间,最早完工时间和最迟完工时间,并计算出各个活动的时差; 4) 找出所有时差为零的活动所组成的路线,即为关键路径; 2.2基本要求 :
(1)选取建图的一种算法建立图; 选取邻接表的算法来建立图,是一种顺序+ 链式存储结构。用顺序表存放顶点,为每个顶点建立一个单链表,单链表中的结点表示依附于该顶点的边或以该顶点为尾的弧。 (2)两个相邻顶点与它们之间的边表示活动,边上的数字表示活动延续的时间 参照该工程所化的AOE-网,求出从起点到终点的所有路径,然后通过拓扑排序和逆拓扑排序求出最早与最晚发生时间,找出长度最大的路径,从而求得关键路径。 2.3目的:
在该部分,即需求分析中,根据设计题目的要求,充分地分析和理解问题,叙述系统的功能要求,明确问题要求做什么,以及限制条件是 什么。 程序所能达到的功能:通过输入所要构建的图的顶点数,弧数,创建图,并打印出来,对图进行拓扑排序,求得此图的最早发生时间和最迟发生时间,并求得关键活动和关键路径,打印出来。 3 概要设计 3.1算法分析:
(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)表示,其持续时间记为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为弧尾的弧的集合。 两个递推公式是在拓扑有序和逆拓扑有序的前提下进行。 3.2算法步骤: (1)输入e条弧,建立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)的为关键活动。 3.3数据结构:
3.3. 1数据结构: typedef struct node边表结点
{ int adjvex; 邻接点编号 int dut; 弧的信息 struct node *next; 下一条弧指针 }edgenode; typedef struct 顶点表结点 { int projectname;顶点域 int id;顶点的入度信息 edgenode *link; 边表头指针 }vexnode; 3.3. 2程序模块: int main() 界面程序的主函数 void seekkeyroot() 求关键路径的主函数 void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber) 函数建立AOE图