关键路径的查找实验报告
项目管理中的关键路径分析
![项目管理中的关键路径分析](https://img.taocdn.com/s3/m/9157049f77a20029bd64783e0912a21615797f72.png)
项目管理中的关键路径分析在项目管理中,关键路径分析是一种重要的技术,用于确定项目中最关键的任务或活动,以确保整个项目能够按时完成。
关键路径分析可以帮助项目团队确定哪些任务是最关键的,需要特别注意和优先处理,以避免项目延期或超预算。
首先,关键路径分析需要明确项目的所有任务和活动,并确定它们之间的依赖关系。
通常情况下,项目中的每个任务都会有一个预期的开始时间和结束时间,以及与其他任务的关联性。
通过这些信息,可以绘制出一个项目网络图,显示了各个任务之间的关系和时间节点。
在项目网络图中,通过计算每个任务的最早开始时间(Early Start)和最晚开始时间(Late Start),可以确定每个任务的浮动时间(Float),即任务可以延迟的最长时间而不会影响项目整体的进度。
同时,还可以计算出整个项目的最早完成时间(Early Finish)和最晚完成时间(Late Finish),从而确定项目的关键路径。
关键路径是指项目中耗时最长的一条路径,上面的任务没有浮动时间,延误任何一个任务都将导致整个项目延期。
因此,项目团队需要特别关注关键路径上的任务,确保它们按时完成,以保证整个项目的成功交付。
关键路径分析的优势在于可以帮助项目管理者更好地规划和控制项目进度,及时识别并解决可能影响项目进度的问题,从而避免项目延误和额外成本。
通过关键路径分析,项目团队可以有效地优化资源分配,最大限度地提高项目的效率和成功交付的概率。
在实际项目管理中,关键路径分析是一个不可或缺的工具,可以帮助项目团队更好地管理项目进度,确保项目按时交付。
通过不断优化和改进项目计划,项目团队可以更快地响应变化和挑战,提高项目成功的可能性,创造更大的商业价值。
因此,掌握关键路径分析技术对于每一个项目管理者来说都是至关重要的。
求关键路径设计报告 数据结构课程设计毕业设计(论文)word格式
![求关键路径设计报告 数据结构课程设计毕业设计(论文)word格式](https://img.taocdn.com/s3/m/da222db66c85ec3a87c2c5ca.png)
数据结构课程设计题目:关键路径的设计报告科系:计算机科学与技术班级:姓名:题目:1、编写拓扑排序和求关键路径的程序2、单源顶点最短路径问题设计报告一.需求分析1.在实际工程中拓扑排序和求关键路径是经常使用来安排任务的先后顺序,以及找出关键的路径,合理的安排非关键任务的施工顺序。
2.对用邻接矩阵表示的有向图,从某一顶点出发(称为源点)到该图其它各顶点(称为终点)有无路径?最短路径是什么?路径长为多少?问题要求写一个程序从有向网中的某一顶点出发找出该顶点到其余各顶点的最短路径。
对邻接矩阵cost[n][n]中的每一个元素只能有三种情况:①当i=j时,cost[i][j]=0;②当顶点i和j无边时,cost[i][j]=∞;③当顶点i和j有边,且其权值为W ij时,cost[i][j]=W ij。
由于题目中没有规定输出格式,此程序以顶点序号的形式将最短路径输出到终端上去,并输出该最短路径的长度。
二.概要设计1.1抽象数据类型图的定义如下:ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集.数据对象I:I是具有相同特性的数据元素的集合,称为顶点集.数据关系R:R={VR}VR={(v,w)|v,w属于V,(v,w)表示v和w之间存在路径}基本操作P:Creat_ALGraph(&G,V,VR,I)初始条件:V是图的顶点集,VR是图中边的集合,I是边的权值。
操作结果:按V和VR的定义构造图G。
DFS(&G, v)初始条件:v是图的一个顶点,图G存在。
操作结果:从v点深度优先遍历图G。
DFSTraverse(&G)初始条件:图G存在。
操作结果:深度优先遍历图G。
FindIngree( G,b[])初始条件:图G存在,数组b[]已知。
操作结果:图G的每个顶点的度放在数组b中。
TopologicalSort(&G)初始条件:图G存在。
操作结果:对图G进行拓扑排序。
软件测试中的关键路径分析
![软件测试中的关键路径分析](https://img.taocdn.com/s3/m/816c869bf424ccbff121dd36a32d7375a417c6e3.png)
软件测试中的关键路径分析在软件开发过程中,软件测试是一个至关重要的环节。
通过对软件系统的各个功能进行验证和检查,软件测试可以确保软件在交付给用户之前能够达到预期的质量标准。
而在软件测试中,关键路径分析是一种常用的技术手段,它能够帮助测试团队识别出软件测试中的关键任务和路径,从而有效地进行测试计划和资源分配。
本文将探讨软件测试中的关键路径分析的原理和应用。
一、关键路径分析的原理关键路径分析是一种基于项目网络图的技术,它通过分析项目中各个任务之间的依赖关系和工期,识别出项目的关键路径。
关键路径是指在不影响整个项目进度的前提下,完成项目所需的最短时间。
在软件测试中,关键路径分析的目的是确定测试活动的最早开始和最晚结束时间,以保证测试工作能够按时完成。
关键路径分析的基本步骤如下:1. 绘制项目网络图:项目网络图是一个由若干任务和其之间的依赖关系构成的有向无环图。
通过绘制项目网络图,可以清晰地了解各个测试任务之间的前后关系。
2. 估算任务工期:对于每个测试任务,需要根据经验和历史数据估算其工期。
工期可以分为正向工期和反向工期,正向工期是指从项目开始到任务完成的时间,反向工期是指从项目完成到任务开始的时间。
3. 根据依赖关系确定任务间的关系:通过分析任务之间的依赖关系,确定任务之间的先后顺序。
在软件测试中,一般有四种类型的依赖关系:开始-开始(SS)、开始-完成(SF)、完成-开始(FS)和完成-完成(FF)。
4. 计算最早开始时间和最晚结束时间:通过对项目网络图进行遍历,可以计算出每个任务的最早开始时间和最晚结束时间。
最早开始时间是指在不考虑其他约束条件的情况下,任务可以开始的最早时间;最晚结束时间是指在不影响整个项目进度的前提下,任务必须完成的最晚时间。
5. 确定关键路径:通过比较每个任务的最早开始时间和最晚结束时间,可以确定项目的关键路径。
关键路径上的任务是项目进度的关键,延误这些任务将导致整个项目的延误。
关键路径实验报告
![关键路径实验报告](https://img.taocdn.com/s3/m/e9cf8cde5022aaea998f0f84.png)
}
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
《关键路径》实验报告
![《关键路径》实验报告](https://img.taocdn.com/s3/m/9235cfed51e79b89680226b2.png)
在的边。
概
主函数:main()
建图函数:CreateGraph ()
要
求解关键路径函数:CriticalPath ()
设
计
int Criticalpath(ALGraph G){ /* G 为有向网,输出 G 的各项关键活动。*/
InitStack(T); /*建立用于产生拓扑逆序的栈 T*/ if (! TopologicalOrder (G,T) )
中中 T中中中中
j中中中中中中中
从 Vl(n)=Ve(n)开始向后递推
Vl(i) Min{Vl( j) dut( i, j )}, i, j S,1 i n 1 j
中中 S中中中中
i中中中中中中中
程序功能:根据输入的图的信息,能够建立 AOE-网,并能够输出关键路径所
e = ve [j]; l = vl [k] - dut;
tag = (e= =l) ? ‘*’:’’ ;
printf ( j,k,dut,e,l,tag ); /*输出关键活动*/ }
return 1; /*求出关键活动后返回 1*/ } /*Criticalpath*/
测试用例 1:如下图(顶点数和边数:9,11)
需
关键活动——关键路径上的活动,即 l(i)=e(i)的活动
求
设活动 ai 用弧<j,k>表示,其持续时间记为:dut(<j,k>)。则有:
e(i)=Ve(j)
描
l(i)=Vl(k)-dut(<j,k>)
如何求 Ve(j)和 Vl(j)?
述
从 Ve(1)=0 开始向前递推
Ve( j) Max{Ve(i) dut( i, j )}, i, j T ,2 j n i
关键路径分析
![关键路径分析](https://img.taocdn.com/s3/m/6c28d67966ec102de2bd960590c69ec3d5bbdb90.png)
风险评估与应对的基本步骤包括识别潜在风险、评估风险发生的概率和影响程度、制定 风险应对计划、监控风险变化并及时调整计划。
风险评估与应对的技巧
为了有效进行风险评估与应对,可以采用一些技巧,如风险分类与优先级排序、制定应 急预案、风险转移与分散等。这些技巧有助于降低项目风险,提高项目的成功率。
谢谢观看
等。这些技巧有助于提高任务执行效率,缩短项目总时长。
关键链法
关键链法的概念
关键链法是一种项目管理方法,它通过识别项目中的关键路径和关键任务,优化资源配置和时间安排,以提高项目执 行效率。
关键链法的基本步骤
关键链法的基本步骤包括确定项目目标、识别关键路径和关键任务、制定详细的项目计划、监控项目执行情况并及时 调整计划。
项目成本超支
总结词
项目成本超出预算
详细描述
项目成本超支是关键路径分析中另一 个常见问题。这可能是由于资源利用 效率低下、任务执行时间过长或预算 制定不合理导致的。
项目资源不足
总结词
关键任务缺乏必要资源
详细描述
项目资源不足是关键路径分析中一个重要挑战。这可能导致任务执行效率低下或无法按时完成,需要 合理分配和调度资源。
项目风险控制
总结词
项目风险未得到有效控制
VS
详细描述
项目风险控制是关键路径分析中的重要环 节。需要对项目过程中可能出现的风险进 行识别、评估和控制,以确保项目的顺利 进行。
06
关键路径分析案例研究
案例一:大型建筑项目的关键路径分析
总结词
合理规划、资源优化
详细描述
大型建筑项目涉及多个分项工程和多个承包商,通过关键路径分析,可以确定项目的关键路径,从而合理规划资 源和时间,确保项目按时交付。
关键路径问题的解决方法心得和体会和感悟
![关键路径问题的解决方法心得和体会和感悟](https://img.taocdn.com/s3/m/8b25200032687e21af45b307e87101f69e31fbe3.png)
关键路径问题的解决方法一、关键路径问题的定义关键路径是指在项目管理中,指的是在不影响整个项目完成时间的前提下,完成某项任务所需要的最短时间路径。
也就是说,如果这条路径上的任何一个任务出现了延误,都会直接导致整个项目的延误。
解决关键路径问题对于项目的整体进度控制至关重要。
二、关键路径问题的常见原因1.资源不足:在项目进行中,可能会出现人力、物力、财力等资源不足的情况,导致关键任务的完成时间延误。
2.任务依赖关系复杂:项目中的任务之间存在复杂的依赖关系,一旦出现环节延误,就会影响整个项目的进度。
3.管理不当:项目管理过程中,可能存在交流不畅、决策不及时等管理不当的情况,导致关键任务无法按时完成。
4.外部环境因素:外部环境的改变,比如市场需求、政策法规等因素的变化,可能会对项目的进度产生影响。
三、解决关键路径问题的方法1.资源优化:对资源进行合理规划和分配,确保在关键任务完成时有足够的人力、物力、财力支持。
2.任务分解:将复杂的任务进行细化分解,明确每个子任务的完成时间和依赖关系,有利于更精准地控制关键路径上的任务。
3.缓冲路径计划:在关键路径之外,预留一定的时间作为缓冲,以防止非关键任务的延误对整个项目产生影响。
4.增加交叉培训:对项目团队成员进行交叉培训,增强团队的协作能力和应对突发情况的能力,提高应对关键路径问题的灵活性。
5.利用项目管理工具:借助项目管理软件,实时监控关键路径上任务的进度,及时发现问题并进行调整。
四、关键路径问题的解决方法的体会和感悟在项目管理中,关键路径问题是一个比较棘手的问题,但通过对问题的深入分析和合理的应对措施,可以有效解决关键路径问题,提高项目的整体进度控制能力。
在实际工作中,我们需要密切关注项目进度的情况,及时发现关键路径上可能存在的问题,从而采取针对性的措施进行解决。
作为项目负责人,更需要对团队的资源规划和任务分解进行详细的考量和分析,确保项目整体进度的可控性。
在不断的实践中,我们可以积累丰富的解决关键路径问题的经验,为今后的项目管理工作提供可靠的支持和保障。
项目管理中的关键路径分析
![项目管理中的关键路径分析](https://img.taocdn.com/s3/m/32fa2d1f814d2b160b4e767f5acfa1c7ab008242.png)
项目管理中的关键路径分析项目管理是一项复杂而又关键的任务,它涉及到时间、成本和资源等多个方面。
而关键路径分析作为项目管理的一种常用工具,起到了至关重要的作用。
本文将探讨项目管理中的关键路径分析,以及它对项目进度和成功的影响。
首先,让我们来了解一下什么是关键路径。
在项目管理中,关键路径是指在项目网络图中,连接起始节点和终止节点并且duration(时间)最长的路径。
换言之,关键路径是项目完成所需时间的最短路径。
任何一个节点的延迟都将影响整个项目的进度。
因此,识别和管理关键路径对项目成功至关重要。
那么,如何进行关键路径分析呢?首先,需要绘制出项目的网络图。
这个网络图是由一系列的任务和依赖关系组成的。
在这个网络图中,可以标注每个任务的预计开始时间和结束时间。
然后,通过计算每个任务之间的时间差,可以确定关键路径。
关键路径上的任务是不能拖延的,因为任何一项任务的延迟都会导致整个项目的延迟。
关键路径分析不仅可以帮助项目管理者识别出项目的最短时间路径,还可以帮助他们预测项目的完成时间和风险。
通过关键路径分析,项目管理者可以确定项目中哪些任务是最为关键的,从而在资源分配上做出正确的决策。
同时,它还可以揭示出项目中哪些任务可以并行进行,从而缩短项目的总时间。
另外,在项目管理中进行关键路径分析还有助于管理风险。
通过识别关键路径上的任务,项目管理者可以更好地了解项目的风险点。
他们可以采取相应的措施来避免风险的发生,或者在风险发生后及时处理。
这样能够提高项目成功的概率,并降低项目失败的风险。
然而,关键路径分析也存在一些挑战和限制。
首先,它要求项目管理者准确地估计每个任务的完成时间。
如果估计不准确,可能会导致整个关键路径的错判。
其次,它假设各个任务之间的依赖关系是确定的,但在实际情况中,任务之间的依赖往往是动态变化的。
最后,关键路径分析只能提供项目最短时间路径,并不能保证项目一定能够按时完成。
为了克服这些挑战,项目管理者可以采取一些方法来优化关键路径分析。
工程项目的关键路径分析
![工程项目的关键路径分析](https://img.taocdn.com/s3/m/fd6f926f0622192e453610661ed9ad51f01d5491.png)
工程项目的关键路径分析工程项目的关键路径分析是一种常用的项目管理工具,用于确定项目完成所需的最短时间以及项目进度中的关键活动。
通过对项目各个活动的时间、依赖性和并行性进行全面分析,可以找到项目的关键路径,进而进行合理的时间安排和资源调度,以确保项目能够按时完成。
一、什么是关键路径在工程项目中,关键路径是指在项目网络图中,从项目开始到结束所需的最长时间路径。
换言之,关键路径上的任何一个活动的延误都会导致整个项目的延期。
因此,关键路径的分析对于项目进度的管理尤为关键。
二、关键路径的确定关键路径的确定需要进行以下几个步骤:1. 绘制项目网络图:通过识别项目中的各个活动以及它们之间的依赖关系,可以绘制出项目的网络图。
在网络图中,活动以箭线表示,箭线上标有活动名称和所需时间。
2. 确定活动的前后关系:对于每个活动,需要明确它之前和之后的活动是什么。
活动之间的关系可以是先后关系、同时进行关系或者自由关系。
3. 计算活动的最早开始时间(EST)和最迟开始时间(LST):从项目开始到结束,每个活动都有一个最早开始时间和最迟开始时间。
最早开始时间是指在没有其他限制的情况下,该活动能够开始的最早时间;最迟开始时间是指在不影响整个项目进度的前提下,该活动必须开始的最迟时间。
4. 计算活动的最早完成时间(EFT)和最迟完成时间(LFT):最早完成时间是指在没有其他限制的情况下,该活动能够完成的最早时间;最迟完成时间是指在不影响整个项目进度的前提下,该活动必须完成的最迟时间。
5. 计算活动的总时差(TF):总时差是指该活动的最迟完成时间与最早完成时间之间的差值。
如果某个活动的总时差为零,则该活动位于关键路径上。
6. 确定关键路径:通过计算各个活动的总时差,可以确定项目的关键路径。
关键路径上的各个活动的总时差都为零,延误其中任何一个活动都会导致整个项目的延期。
三、关键路径的分析应用关键路径的分析可以帮助项目管理者做出合理的决策和安排,以确保项目的顺利进行。
关键分析实验报告
![关键分析实验报告](https://img.taocdn.com/s3/m/ddd33243640e52ea551810a6f524ccbff121caa0.png)
一、实验目的本次实验旨在通过关键分析的方法,对某一具体现象或问题进行深入研究,揭示其内在规律和关键影响因素,为后续的理论研究和实践应用提供依据。
二、实验背景随着科学技术的不断发展,人们对自然界和社会现象的认识越来越深入。
然而,许多现象或问题仍然存在许多未知和争议。
为了更好地理解这些现象或问题,关键分析成为了一种重要的研究方法。
三、实验材料与工具1. 实验材料:研究对象的相关数据、文献资料、实验设备等。
2. 实验工具:计算机、统计软件、数据分析软件等。
四、实验方法1. 文献综述:查阅相关文献,了解研究对象的研究现状和发展趋势,为实验提供理论基础。
2. 数据收集:根据研究目的,收集相关数据,包括实验数据、调查数据、统计数据等。
3. 数据处理:对收集到的数据进行整理、清洗、转换等,为后续分析做好准备。
4. 关键分析:运用关键分析方法,对数据进行分析,找出影响研究对象的关键因素。
5. 结果验证:通过实验、模拟等方式,验证关键分析结果的准确性。
五、实验步骤1. 明确研究问题:根据实验目的,确定研究对象和研究问题。
2. 文献综述:查阅相关文献,了解研究对象的研究现状和发展趋势。
3. 数据收集:根据研究目的,收集相关数据,包括实验数据、调查数据、统计数据等。
4. 数据处理:对收集到的数据进行整理、清洗、转换等,为后续分析做好准备。
5. 关键分析:a. 描述性分析:对数据进行描述性统计分析,了解数据的分布情况。
b. 相关性分析:分析变量之间的相关性,找出可能影响研究对象的关键因素。
c. 因子分析:对变量进行降维处理,找出影响研究对象的关键因素。
d. 回归分析:建立回归模型,分析关键因素对研究对象的影响程度。
6. 结果验证:通过实验、模拟等方式,验证关键分析结果的准确性。
7. 结论与讨论:根据实验结果,总结研究结论,并对研究方法进行讨论。
六、实验结果与分析1. 描述性分析:对收集到的数据进行描述性统计分析,得出以下结论:a. 数据的分布情况;b. 变量的平均值、标准差、最大值、最小值等。
项目关键路径分析总结
![项目关键路径分析总结](https://img.taocdn.com/s3/m/14e4ffeb370cba1aa8114431b90d6c85ec3a8885.png)
项目关键路径分析总结在项目管理中,关键路径分析是一种重要的工具,用于确定项目的关键活动和路径,以及项目完成所需的最短时间。
通过对项目各个活动的时间、依赖关系和资源约束进行分析,可以帮助项目经理有效地进行进度计划和资源分配。
本文将总结项目关键路径分析的基本原理和步骤,并探讨其在实际项目中的应用。
1. 关键路径分析的基本原理关键路径分析是通过构建项目网络图来确定关键活动和关键路径。
项目网络图由活动节点和箭头连接组成,箭头表示活动之间的依赖关系,节点表示活动的开始和结束时间点。
在项目网络图中,关键活动是指其总时长最长的路径上的活动,关键路径是指由关键活动组成的路径。
关键路径上的活动不能延误,否则将会对整个项目的进度产生重大影响。
2. 进行关键路径分析的步骤2.1 收集项目相关信息:包括活动清单、各活动之间的依赖关系、活动所需的时间、资源约束等。
2.2 绘制项目网络图:将项目的活动和依赖关系用节点和箭头表示,并标明活动所需时间。
2.3 确定各活动的最早开始时间(EST)和最晚开始时间(LST):从项目的起始节点开始,根据依赖关系计算各活动的最早开始时间和最晚开始时间。
2.4 确定各活动的最早完成时间(EFT)和最晚完成时间(LFT):根据活动所需时间和最早/晚开始时间计算各活动的最早完成时间和最晚完成时间。
2.5 计算各活动的总时差(TF):总时差即最晚开始时间减去最早开始时间,表示活动可以延误的时间。
2.6 确定关键路径:根据最早完成时间和最晚完成时间,找出活动总时差为0的路径,即为关键路径。
3. 关键路径分析的应用3.1 进度控制:通过关键路径分析,项目经理可以清楚地知道项目关键活动和关键路径,并根据其完成时间进行进度控制和调整。
3.2 资源分配:关键路径分析可以帮助项目经理确定哪些活动在项目中是最关键的,从而合理分配资源,保证项目的顺利进行。
3.3 风险管理:关键路径分析可以帮助项目经理识别项目中的潜在风险点,从而及时采取措施降低风险的影响。
关键路径的查找实验报告
![关键路径的查找实验报告](https://img.taocdn.com/s3/m/dd71940bdd36a32d737581fd.png)
中国矿业大学矿业工程学院实验报告课程名称计算机软件设计基础姓名 xxxx 班级采矿10-8班学号 xxxxx 日期 2012年10月成绩教师 xxxx3.2算法步骤:(1)输入e条弧<j,k>,建立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)的为关键活动。
总结首先,关于程序方面,我发现即使对设计思路有了眉目,知道了所要用到的数据结构、用邻接表来存储AOE-网、建立栈来求拓扑序列、输出的拓扑序列的个数少于节点数则有回路等等,要把这些方法写成函数代码,其实还是一件非常不容易的事情。
再加上要完善设计思路,构造整个程序框架在内,都是一件工作量非常大的工作。
在处理程序代码的时候,有两个问题始终解决不了。
一是程序输入时只能输入整形数据,而非整形的输入则会导致程序异常停止,但是因为整形的输入方式已贯穿整个程序,若要修改只能另外重做整个程序,所以暂不考虑修改,而打算做一个判错系统,判断若非整形的输入则报错;二是第一种错误的解决方案未能成功实行,于网路上搜索到了几种判断是否为整形数据的程序代码,但将其修改融合到求关键路径的程序中,虽然没有错误可以运行,但是却不能正确的报错。
于是,在尝试多种方案却仍不成功的前提下,我只好选择加上提示语,即:printf("请输入某项目的信息,并请用整形数字表示(格式:弧头,弧尾,权值):\n");printf("例如:输入1,2,4 即代表结点1与4之间的活动需要4个时间单位。
\n");这是这次课程设计中最大的两个遗憾。
不过在操作界面的人性化上,我倒尽可能的做得很完善,无论从美观角度还是方便清楚操作,都实行了非常人性化的方式。
关键路径问题报告
![关键路径问题报告](https://img.taocdn.com/s3/m/05e9644ae518964bcf847c17.png)
滁州学院课程设计报告课程名称:数据结构设计题目:关键路径问题院部:计算机与信息工程专业:网络工程组别:第六组起止日期:2012年4月9日~2012年6月24日指导教师:赵玉艳计算机与信息工程学院二○一二年制课程设计题目关键路径问题组长柯焱芳学号2011211384 班级网工113班院部计算机工程系专业网络工程组员靳梦婷李鹏飞陆勇刘宜雨指导教师赵玉艳课程设计目的1.巩固和加深学生对数据结构课程基本知识的理解,综合该课程中所学的理论知识,独立或联合完成一个数据结构应用课题的设计;2.根据选题需要,通过查阅手册和文献资料,培养分析和解决实际问题的能力;3.熟练掌握图的各种基本数据结构的定义、存储结构和相应的算法,并可熟练利用c语言进行实现;4.具有一定的算法设计和分析能力,掌握选用合适的数据结构解决实际问题的方法;5.学会撰写课程设计报告,能做出简单答辩;6.培养严肃认真的工作作风和严谨求实的科学态度。
课程设计所需环境⑴实验设备:PC机⑵操作系统:Windows XP ⑶开发环境:VisioC++6.0课程设计任务要求要求学生理解图的特征和性质,掌握各类图的存储结构、相关操作的程序实现以及图的应用,能够利用图的遍历、图的最小生成树、最短路径、关键路径、拓扑排序等原理解决实际问题。
课程设计工作进度计划序号起止日期工作内容分工情况1 4.09-4.16 选题与分析课题内容,查找资料柯焱芳:选题与分析课题内容陆勇靳梦婷李鹏飞刘宜雨:查找资料2 4.17-4.25 编写创建图,求最大路径的函数刘宜雨靳梦婷:创建图李鹏飞陆勇:求最大路径34.26-5.16 编写总代码和主函数(求关键路径)柯焱芳:编写总代码和主函数(求关键路径)4 5.17-5.25 对程序输入改写柯焱芳靳梦婷:对程序输入改写5 5.26-6.10 对程序进行测试柯焱芳靳梦婷刘宜雨陆勇李鹏飞6 6.11-6.24 整理文档与总结柯焱芳陆勇指导教师签字:年月日院(系)审核意见院长(主任)签字:年月日目录1 引言 (1)2 需求分析 (1)2.1问题描述 (1)2.2基本要求 (1)2.3目的 (2)3 概要设计 (2)3.1数据类型 (2)3.2 程序流程图 (2)4 详细设计 (3)4.1文件输入 (3)4.2创建图的函数 (3)4.3求关键路径 (4)5 关键路径测试 (7)6 课程设计总结与体会 (10)参考文献 (11)附录 (12)致谢 (17)当一项工程划分为若干个子任务或活动后,人们不仅需要确定这些活动的先后次序,而且需要进一步计算完成整个工程的时间,确定哪些活动是影响工程进度的关键活动,以便合理地组织人力、物力、财力,加快这些活动的进度,为按时或提前完成整个工程提供保证,这就是关键路径问题。
数据结构课程设计报告---关键路径
![数据结构课程设计报告---关键路径](https://img.taocdn.com/s3/m/dcf4325df90f76c661371aca.png)
数据结构课程设计报告---关键路径数 据 结 构课 程 设 计报 告院系: 信息管理学院 专业: 软件工程班级: 软件Q1141学号: 11150038姓名: 李艳平 教师: 邓沌华时间: 2013.4.2理论成绩 实践成绩 总成绩目录一、问题的描述二、系统需求及分析1、简要介绍2、需求分析3、概要设计4、详细设计(1)数据结构(2)创建有向图的邻接表(3)计算各事件及活动的相关信息(4)输出有向图的相关信息(5)判断图中是否有回路(6)计算并输出关键活动(7)计算并输出关键路径(8)操作入口三、系统实现四、设计总结五、附件(完整源代码)一、问题的描述:关键路径问题(起评分:85)1、功能:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。
2、数据:自行设计每个活动的前导活动和后续活动以及活动的进行时间,然后依据这些活动的前后次序,画出其网络图,选择存储结构。
3、操作:(1)求工程最短工期;(2)输出关键路径;(3)输出关键活动。
4、要求:界面友好,提示信息完整。
二、系统需求及分析:1、简要介绍:我们通常把计划、施工过程、生产流程、程序流程等都当成一个工程。
工程通常分为若干个称为“活动”的子工程。
完成了这些“活动”,这个工程就可以完成了。
我们通常用AOE-网来表示工程。
AOE-网是一个带权的有向无环图,其中,顶点表示事件(EVENT),弧表示活动,权表示活动持续的时间。
AOE-网可以用来估算工程的完成时间。
他可以使人们了解:(1). 研究某个工程至少需要多少时间?(2). 哪些活动是影响工程进度的关键?由于AOE-网中的有些活动可以并行进行,从开始点到各个顶点,以致从开始点到完成点的有向路径可能不止一条,这些路径的长度也可能不同。
完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。
因此,完成工程所需的最短时间是从开始点到完成点的最长路径的长度,即在这条路径上的所有活动的持续时间之和.这条路径长度就叫做关键路径(Critical Path)。
网络图和关键路径
![网络图和关键路径](https://img.taocdn.com/s3/m/4651c4203169a4517723a31f.png)
宁波大红鹰学院实验报告
实验名称:网络计划应用(一)
学院:信息工程专业:信息管理与信息系统年级:11级
问题2:已知某项目的各工序关系和时间如下表所示:
工序
紧前工序
工序时间(d)
工序
紧前工序
工序时间(d)
工序
紧前工序
工序时间(d)
a
g,m
3
e
c
5
i
a,l
2
b
h
4
f
a,e
5
k
f,i
1
c
-
7
g
b,c
2
l
b,c
7
d
l
3
h
-
5
m
c
3
若要求工程完工时间缩短2 d(天) ,缩短哪些工序时间为宜。
三、问题的数学模型及求解结果解释
小组成员1:学号:职责:
小组成员2:学号:职责:
小组成员3:学号:职责:
实验时间:年月日实验类型:
实验地点:成绩:指导教师签字:
实验报告基本内容要求:一、实验目的和要求;二、实验内容和原理;三、主要仪器设备;四、操作方法与实验步骤;五、实验数据记录和处理;六、实验结果与分析;七、讨论、心得
一、实验目的和要求
1、掌握项目的进度箭线图的绘制方法
2、学会利用Excel工具计算项目各工序网络时间和寻找项目关键工序的方法
要求:在实验报告中建立问题的数学模型并用Excel求解模型,完成后将实验报告和Excel文件提交
文件检索实验报告
![文件检索实验报告](https://img.taocdn.com/s3/m/60c3fa9cb8f3f90f76c66137ee06eff9aff8495d.png)
文件检索实验报告1. 实验目的本实验旨在通过实际操作,掌握文件检索的基本原理和方法,提高对于信息的快速查找和筛选能力。
2. 实验器材- 一台计算机- 文件检索软件3. 实验步骤步骤一:了解文件检索软件的基本功能及操作方法在开始实验之前,首先需要对所使用的文件检索软件进行了解。
该软件通常具有以下基本功能:文件关键词搜索、文件类型筛选、文件路径指定、文件内容查找等。
步骤二:准备测试文件为了模拟实际情境,我们需要准备一定数量、不同类型的测试文件。
可以包括文本文件、图像文件、音频文件以及视频文件等,使其具有一定的复杂性和多样性。
步骤三:进行文件检索实验1) 关键词搜索打开文件检索软件,在搜索框中输入关键词进行搜索,观察结果的准确性和完整性。
根据实际需求,可以使用单个关键词或多个关键词进行搜索,以及添加搜索时间、搜索路径等限定条件。
2) 文件类型筛选在搜索过程中,可以根据文件类型进行筛选。
例如,仅搜索文本文件、图像文件或音频文件等。
观察筛选结果是否准确,并分析检索软件是否能够正确识别不同文件类型。
3) 文件路径指定对于已知文件所在路径的情况,可以直接指定路径进行查找。
通过在搜索框中输入文件路径,观察软件是否能够准确找到相应文件。
4) 文件内容查找部分文件检索软件支持对文件内容进行全文检索。
在实验中,可以选择一些文本文件,输入关键词进行内容查找,以测试软件对于文本内容的搜索能力。
4. 实验结果与分析在实验过程中,我们观察到文件检索软件的关键词搜索功能相对较为准确,可以找到与关键词相关的文件。
然而,在关键词较为模糊或文件命名不规范的情况下,搜索结果可能会产生一定的误差。
因此,准确地命名文件以及使用明确的关键词对于提高搜索准确性非常重要。
文件类型筛选功能在实验中表现出良好的效果。
通过选择不同的文件类型,我们可以快速定位到所需的特定类型文件,提高检索效率。
然而,对于一些复杂的文件类型,软件可能未能正确分类,导致筛选结果不准确。
关键路径分析(CPM)
![关键路径分析(CPM)](https://img.taocdn.com/s3/m/1dca1829c5da50e2524d7fd6.png)
关键路径分析(CPM)意义与功能通过绘制网络图,找到影响工期的最关键的任务,加以监控。
基本概念①正常工期(NT):正常情况下,完成单项任务所必需的时间。
②最早开始时间(ES):单项任务可以开始的最早可能时间。
③最早结束时间(EF):EF=ES+NT。
④最迟结束时间(LF):不影响工期的前提下,单项任务的最晚完成时间。
⑤最迟开始时间(LS):LS=LF-NT。
⑥松弛时间(ST):不影响工期的前提下,单项任务开始时间可以推迟的最大限度。
ST=LS-ES=LF-EF 。
⑦关键路径(CP):网络中的最长时间路径。
具体内容①工作任务分解;绘出连接所有活动的网络图;②圆圈表示任务,箭头线表示任务顺序和相互间的联系;③输入每项活动的名称和时间;计算关键路径、松弛时间进行规划、排程、监管和控制。
(4)绘图规定①一个网络图只有一个开始点和一个结束点。
②网络图是有方向的,不应该出现循环回路。
③一对节点不能同时出入两项活动。
④网络图中不能出现无箭头箭线和双箭头箭线。
⑤网络图中不能出现无节点的箭线。
⑥在同一个网络图中的所有节点中,不能出现相同的编号。
图3-4CPM图形元素(5)分析方法①绘制网络图,填入“任务、路径、累计工期”三项。
②找到任务结束点“累计工期”的最大值,对应的路径就是关键路径;③从任务开始点向结束点推算关键路径的ES、LS、EF、LF,并推算非关键路径的ES、EF;④从任务结束点向开始点推算非关键路径的LS、LF。
⑤计算每一步的松弛时间。
数据库关键路径实验报告参考模板
![数据库关键路径实验报告参考模板](https://img.taocdn.com/s3/m/75138565cc22bcd127ff0ce6.png)
成都信息工程学院计算机系课程实验报告一【上机实验目的】对有向图的拓扑排序和关键路径更加了解以及更好的应用它二【实验环境】PC机每人1台在Visual C++环境下测试三【上机实验内容】.给定一图,在其拓朴排序的基础上,求关键路径,要求以图形界面呈现关键路径。
四【上机调试程序流程图】(注:可打印)五【上机调试中出现的错误信息、错误原因及解决办法】犯的错误1.在写构建图这个子函数时,初始数据的时候有点问题,本来想用文件的,但是对于文件用的不是很熟悉,然后就利用了二维数组来存放数据。
2.就是在画图形界面的时候,让关键路径以另外的颜色出现时候出现了问题。
解决方法是找到个最早时间和最迟时间相等就把顶点和终点赋值给相应的顶点,再进行颜色的改变。
六【上机调试后的源程序及还存在的问题】(注:源程序可打印)#include <graphics.h>#include<iostream>using namespace std;#define MAX_VEXTEX_NUM 20#define M 20#define MaxLen 1000 //最大长度#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -1typedef int SElemType;typedef int VertexType;typedef int VRType;typedef int InfoType;typedef struct ArcNode{int adjvex; // 该弧所指向的顶点的位置struct ArcNode *nextarc;// 指向下一条弧的指针InfoType info; // 该弧相关信息的指针}ArcNode;typedef struct VNode{VertexType data;// 顶点信息ArcNode *firstarc;// 指向第一条依附该顶点的弧}VNode,AdjList[MAX_VEXTEX_NUM];typedef struct{AdjList vertices;int vexnum, arcnum;}ALGraph;typedef struct SqStack{SElemType *base;SElemType *top;int stacksize;}SqStack;class point //画界面{public:point(int x,int y):m_x(x),m_y(y){}point(){}int x(){return m_x;}int y(){return m_y;}point operator+(point p){return point(m_x+p.x(),m_y+p.y());}point operator/(int i){return point(m_x/i,m_y/i);}private:int m_x;int m_y;};int g_r=25;int g_height=400;int g_width=500;point g_pos[9];void paintmain(ALGraph &G);void line(point a,point b){line(a.x(),a.y(),b.x(),b.y());}void fillcircle(point p,int r){fillellipse(p.x(),p.y(),r,r);}void outtext(point p,char* str){outtextxy(p.x(),p.y(),str);} //界面void InitStack(SqStack &S)//初始化栈{S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base)exit (OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;}int Pop(SqStack &S,SElemType &e)//出栈操作{if(S.top==S.base)return ERROR;e=*--S.top;return OK;}int Push(SqStack &S,SElemType e)//人栈操作{if(S.top-S.base>=S.stacksize){S.base = (SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top = S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}int StackEmpty(SqStack S)//判栈是否为空{if(S.top==S.base)return OK;elsereturn ERROR;}int CreatALGraph(ALGraph &G)//构建图{ArcNode *p;int i,j, k,info1;int a[11][3]={{1,2,6},{1,3,4},{1,4,5},{2,5,1},{3,5,1},{4,6,2},{5,7,9},{5,8,7},{6,8,4},{7,9,2},{8,9,4}};G.vexnum=9;G.arcnum=11;for (i=1;i<=G.vexnum;i++)G.vertices[i].data=i;G.vertices[i].firstarc=NULL;}for(k=0;k<G.arcnum;k++){i=a[k][0];j=a[k][1];info1=a[k][2];p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=info1;p->nextarc=G.vertices[i].firstarc;G.vertices[i].firstarc=p;}return OK;}void FindInDegree(ALGraph G,int indegree[])//求入度操作{int i;for(i=1;i<=G.vexnum;i++){indegree[i]=0;}for(i=1;i<=G.vexnum;i++){while(G.vertices[i].firstarc){indegree[G.vertices[i].firstarc->adjvex]++;G.vertices[i].firstarc=G.vertices[i].firstarc->nextarc;}}}int ve[100];int TopologicalSort(ALGraph G,SqStack &T) //进行拓扑排序{int indegree[M];FindInDegree(G, indegree);//求各顶点的入度SqStack S;int i,x,k;InitStack(S);ArcNode *p;InitStack(S);for (i=1;i<=G.vexnum;i++){if (!indegree[i])Push(S,i);//入度为0者入栈}InitStack(T);int count=0;for(x=1;x<=G.vexnum;x++)// ve[0..G.vexnum-1]=0; {ve[x]=0;}while(!StackEmpty(S)){Pop(S,i);Push(T,i);++count;//输出i号顶点并计数for (p=G.vertices[i].firstarc;p;p=p->nextarc){k=p->adjvex;if (--indegree[k]==0)//若入度减为0,则入栈{Push(S,k);}if((ve[i]+p->info)>ve[k]){ve[k]= ve[i]+p->info;}}}printf("\n");if (count<G.vexnum)//该图有回路{printf("出现错误\n");}else{printf("排序成功\n");}return OK;}int CriticalPath(ALGraph G)//输出G的关键活动{int dut;int j=G.vexnum;int i,k;int ee,el;int vl[100];ArcNode *p;SqStack T;if(!TopologicalSort(G,T)){printf("该图存在环,无法找到关键路径!");return ERROR;}for(i=1;i<=G.vexnum;i++)// vl[0.. G.vexnum-1] =ve[0..G.vexnum-1];//用ve初始化vl {vl[i]=ve[G.vexnum];}while(!StackEmpty(T))for(Pop(T,j),p=G.vertices[j].firstarc;p;p=p->nextarc){k=p->adjvex;dut=p->info;if((vl[k]-dut)<vl[j]){vl[j]=vl[k]-dut;}}//end of forfor(i=1;i<=G.vexnum;++i){for (p=G.vertices[i].firstarc;p;p=p->nextarc){k=p->adjvex;dut=p->info;ee=ve[i];el=vl[k]-dut;if(ve[i]==(vl[k]-dut)){setcolor(BLUE);line(g_pos[i],g_pos[k]);}}//end of for(p)}return 1;}//end of CriticalPathvoid paintmain(ALGraph &G){setbkcolor(WHITE);setcolor(BLACK);setfont(-15,0,"微软雅黑");ArcNode *p;int i,j, k,info1;int a[11][3]={{1,2,6},{1,3,4},{1,4,5},{2,5,1},{3,5,1},{4,6,2}, {5,7,9},{5,8,7},{6,8,4},{7,9,2},{8,9,4}};G.vexnum=9;G.arcnum=11;for(k=0;k<G.arcnum;k++){i=a[k][0];j=a[k][1];info1=a[k][2];char str[10]; //画线point p1=g_pos[i];point p2=g_pos[j];int w=info1;itoa(w,str,10);line(p1,p2);outtext((p1+p2)/2,str);p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=info1;p->nextarc=G.vertices[i].firstarc;G.vertices[i].firstarc=p;}setcolor(RED);for ( i=1; i<=9; ++i) // paint circle{char str[10]="v";itoa(i,str+1,10);fillcircle(g_pos[i],g_r);setbkmode(TRANSPARENT);outtext(g_pos[i]+point(-8,-8),str);}}int main(){ALGraph G;CreatALGraph(G);setinitmode(NULL);initgraph(g_width,g_height);// setcaption("AOE-网演示程序");g_pos[1]=point(35,120);g_pos[2]=point(140,70);g_pos[3]=point(140,180);g_pos[4]=point(140,260);g_pos[5]=point(250,120);g_pos[6]=point(260,260);g_pos[7]=point(360,70);g_pos[8]=point(360,180);g_pos[9]=point(450,120);paintmain(G);setfont(-20,0,"微软雅黑");outtextxy(160,10,"按任意键开始演示...");getch();CriticalPath(G);getch();return 0;}七【上机实验中的其他它问题及心得】经过半学期学习数据结构然后做了这个关键路径的小项目,要写出这个小项目必需要平时努力的学好前面的知识,为后面打下基础才能写好这个程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国矿业大学矿业工程学院实验报告课程名称计算机软件设计基础姓名 xxxx 班级采矿10-8班学号 xxxxx 日期 2012年10月成绩教师 xxxx3.2算法步骤:(1)输入e条弧<j,k>,建立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)的为关键活动。
总结首先,关于程序方面,我发现即使对设计思路有了眉目,知道了所要用到的数据结构、用邻接表来存储AOE-网、建立栈来求拓扑序列、输出的拓扑序列的个数少于节点数则有回路等等,要把这些方法写成函数代码,其实还是一件非常不容易的事情。
再加上要完善设计思路,构造整个程序框架在内,都是一件工作量非常大的工作。
在处理程序代码的时候,有两个问题始终解决不了。
一是程序输入时只能输入整形数据,而非整形的输入则会导致程序异常停止,但是因为整形的输入方式已贯穿整个程序,若要修改只能另外重做整个程序,所以暂不考虑修改,而打算做一个判错系统,判断若非整形的输入则报错;二是第一种错误的解决方案未能成功实行,于网路上搜索到了几种判断是否为整形数据的程序代码,但将其修改融合到求关键路径的程序中,虽然没有错误可以运行,但是却不能正确的报错。
于是,在尝试多种方案却仍不成功的前提下,我只好选择加上提示语,即:printf("请输入某项目的信息,并请用整形数字表示(格式:弧头,弧尾,权值):\n");printf("例如:输入1,2,4 即代表结点1与4之间的活动需要4个时间单位。
\n");这是这次课程设计中最大的两个遗憾。
不过在操作界面的人性化上,我倒尽可能的做得很完善,无论从美观角度还是方便清楚操作,都实行了非常人性化的方式。
因为通常清楚程序的人,知道怎么操作以及该输入什么,而不清楚的人却有很大可能在细节方面输入错误导致程序运行失败,或是根本不知道应该怎么输入。
所以,尽可能的人性化的设计是非常有必要的,让不懂程序的人也可以正确的操作运行。
我认为这样的课程设计比较有意义,独立完成资料的搜集以及课设的内容,然后独立的做出报告,让这个过程很完整,无论是知识方面、还是报告的书写方面,都学到了更多的东西,为毕业设计打下了良好的基础。
最后,做再次一下总结。
程序方面仍有为解决的问题,希望即便课设之后也可以努力将问题解决掉。
然后关键路径的算法中,有些知道怎么做却很难清楚回答出来的问题,希望可以再好好的查找一下相关资料,将知识系统化、理论化、规范化。
三、程序设计步骤1)功能分析说明图:2)采用主要的数据结构类型。
1、数据结构typedef struct node{int adjvex;int dut;struct node *next;}edgenode;typedef structint projectname;int id;edgenode *link;}vexnode;//vexnode Graphicmap[PROJECTNUMBER];2、构建AOE-网void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber) // 构建AOE-网,for(scanf())逐个对图结点信息(包括两邻接点,权值)输入接收,并与分配存储空间。
{int begin,end,duttem;edgenode *p;for(int i=0;i<projectnumber;i++){Graphicmap[i].projectname=i;Graphicmap[i].id =0;Graphicmap[i].link =NULL;}printf("某项目的开始到结束在图中的节点输入<vi,vj,dut>\n");printf("如:,4,9 回车表示第三节点到第四节点之间的活动用了个单位时间\n");for(int k=0;k<activenumber;k++){scanf("%d,%d,%d",&begin,&end,&duttem);p=(edgenode*)malloc(sizeof(edgenode));p->adjvex =end-1;p->dut =duttem;Graphicmap[end-1].id ++;p->next =Graphicmap[begin-1].link ;Graphicmap[begin-1].link =p;}}3、寻找关键路径int SearchMaxPath(vexnode* Graphicmap,int projectnumber,int activenumber,int& totaltime) //寻找关键路径,构建栈用与储存拓扑排序序列,求得每个接点的相应最早发生时间、最迟完成时间,关键事件的求取,并输出关键路径。
{int i,j,k,m=0;int front=-1,rear=-1;int* topologystack=(int*)malloc(projectnumber*sizeof(int));//用来保存拓扑排列int* vl=(int*)malloc(projectnumber*sizeof(int));//用来表示在不推迟整个工程的前提下,VJ允许最迟发生的时间int* ve=(int*)malloc(projectnumber*sizeof(int));//用来表示Vj最早发生时间int* l=(int*)malloc(activenumber*sizeof(int));//用来表示活动Ai最迟完成开始时间int* e=(int*)malloc(activenumber*sizeof(int));//表示活动最早开始时间edgenode *p;totaltime=0;for(i=0;i<projectnumber;i++) ve[i]=0;for(i=0;i<projectnumber;i++){if(Graphicmap[i].id==0){topologystack[++rear]=i;m++;}}while(front!=rear){front++;j=topologystack[front];m++;p=Graphicmap[j].link ;while(p){k=p->adjvex ;Graphicmap[k].id --;if(ve[j]+p->dut >ve[k])ve[k]=ve[j]+p->dut ;if(Graphicmap[k].id ==0)topologystack[++rear]=k;p=p->next ;}}if(m<projectnumber){printf("\n本程序所建立的图有回路不可计算出关键路径\n"); printf("将退出本程序\n");return 0;}totaltime=ve[projectnumber-1];for(i=0;i<projectnumber;i++)vl[i]=totaltime;for(i=projectnumber-2;i>=0;i--){j=topologystack[i];p=Graphicmap[j].link ;while(p){k=p->adjvex ;if((vl[k]-p->dut )<vl[j])vl[j]=vl[k]-p->dut ;p=p->next ;}}i=0;printf("| 起点| 终点| 最早开始时间| 最迟完成时间| 差值| 备注|\n"); for(j=0;j<projectnumber;j++){p=Graphicmap[j].link;while(p)k=p->adjvex ;e[++i]=ve[j];l[i]=vl[k]-p->dut;printf("| %4d | %4d | %4d | %4d | %4d |",Graphicmap[j].projectname+1,Graphicmap[k].projectname +1,e[i],l[i],l[i]-e[i]);if(l[i]==e[i])printf(" 关键活动|");printf("\n");p=p->next ;}}return 1;}4、数据输入void seekkeyroot() //先使用库函数system("cls")清屏,scanf()对结点数的接收,分配相应的存储空间,调用CreateGraphic()函数和SearchMapPath()函数。
{int projectnumber,activenumber,totaltime=0;system("cls");printf("请输入这个工程的化成图形的节点数:");scanf("%d",&projectnumber);printf("请输入这个工程的活动个数:");scanf("%d",&activenumber);vexnode* Graphicmap=(vexnode*)malloc(projectnumber*sizeof(vexnode));CreateGraphic(Graphicmap,projectnumber,activenumber);SearchMaxPath(Graphicmap,projectnumber,activenumber,totaltime);printf("整个工程所用的最短时间为:%d个单位时间\n",totaltime);system("pause");}3)各软件模块之间的调用方式该软件各个模块的调用主要是通过声明函数,和定义函数,再通过主函数调用实现的。
主函数:int main() // 输出主屏信息,判断进入关键路径的程序条件,switch()对条件进行选择。
{char ch;for(;;){do{system("cls");printf("| 欢迎进入求关键路径算法程序 |\n"); for(int i=0;i<80;i++)printf("*");printf("%s","(S)tart开始输入工程的节点数据并求出关键路径\n");printf("%s","(E)xit退出\n");printf("%s","请输入选择:");scanf("%c",&ch);ch=toupper(ch);}while(ch!='S'&&ch!='E');switch(ch){case'S':seekkeyroot();break;case'E':return 1;}}}。