数据结构_关键路径实验报告

合集下载

求关键路径设计报告 数据结构课程设计毕业设计(论文)word格式

求关键路径设计报告 数据结构课程设计毕业设计(论文)word格式

数据结构课程设计题目:关键路径的设计报告科系:计算机科学与技术班级:姓名:题目: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进行拓扑排序。

关键路线法实验报告(3篇)

关键路线法实验报告(3篇)

第1篇一、实验目的通过本次实验,掌握关键路线法(Critical Path Method,CPM)的基本原理和操作步骤,学会运用CPM方法进行项目进度计划和控制,提高项目管理水平。

二、实验背景关键路线法是一种用于项目进度计划和控制的方法,通过分析项目网络图中各活动的逻辑关系和持续时间,确定关键路线,从而预测项目工期,并对项目进度进行有效控制。

三、实验内容1. 项目网络图的绘制- 以某建筑工程项目为例,绘制项目网络图,标明各活动之间的逻辑关系和持续时间。

- 确定项目起点和终点,以及各活动的紧前活动和紧后活动。

2. 计算各活动的最早开始时间(ES)和最早结束时间(EF)- 从项目起点开始,按顺序计算各活动的最早开始时间和最早结束时间。

3. 计算各活动的最迟开始时间(LS)和最迟结束时间(LF)- 从项目终点开始,逆序计算各活动的最迟开始时间和最迟结束时间。

4. 计算各活动的总时差(TS)- 总时差 = 最迟开始时间 - 最早开始时间或最迟结束时间 - 最早结束时间。

5. 确定关键路线- 找出总时差为0的活动,这些活动组成关键路线。

6. 绘制关键路线图- 将关键路线在项目网络图中标注出来,以便直观地展示关键路线。

四、实验步骤1. 项目网络图的绘制- 使用Microsoft Visio或其他绘图软件,绘制项目网络图。

- 确定项目起点和终点,以及各活动的紧前活动和紧后活动。

2. 计算各活动的最早开始时间和最早结束时间- 从项目起点开始,按顺序计算各活动的最早开始时间和最早结束时间。

3. 计算各活动的最迟开始时间和最迟结束时间- 从项目终点开始,逆序计算各活动的最迟开始时间和最迟结束时间。

4. 计算各活动的总时差- 计算总时差 = 最迟开始时间 - 最早开始时间或最迟结束时间 - 最早结束时间。

5. 确定关键路线- 找出总时差为0的活动,这些活动组成关键路线。

6. 绘制关键路线图- 将关键路线在项目网络图中标注出来,以便直观地展示关键路线。

数据结构课程实验报告

数据结构课程实验报告

数据结构课程实验报告一、实验目的数据结构是计算机科学中一门重要的基础课程,通过本次实验,旨在加深对数据结构基本概念和算法的理解,提高编程能力和解决实际问题的能力。

具体目标包括:1、掌握常见数据结构(如数组、链表、栈、队列、树、图等)的基本操作和实现方法。

2、学会运用数据结构解决实际问题,培养算法设计和分析的能力。

3、提高程序设计的规范性和可读性,培养良好的编程习惯。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容本次实验共包括以下几个部分:(一)线性表的实现与操作1、顺序表的实现定义一个顺序表结构体,包含数据元素数组和表的长度。

实现顺序表的初始化、插入、删除、查找等基本操作。

2、链表的实现定义链表节点结构体,包含数据域和指针域。

实现链表的创建、插入、删除、遍历等操作。

(二)栈和队列的实现与应用1、栈的实现采用顺序存储或链式存储实现栈。

实现栈的入栈、出栈、栈顶元素获取等操作,并应用于表达式求值。

2、队列的实现用循环队列或链式队列实现队列。

实现队列的入队、出队、队头元素获取等操作,应用于模拟排队系统。

(三)树的基本操作与遍历1、二叉树的实现定义二叉树节点结构体,包含数据域、左子树指针和右子树指针。

实现二叉树的创建、插入、删除节点等操作。

2、二叉树的遍历分别实现前序遍历、中序遍历和后序遍历,并输出遍历结果。

(四)图的表示与遍历1、邻接矩阵和邻接表表示图定义图的结构体,使用邻接矩阵和邻接表两种方式存储图的信息。

实现图的创建、添加边等操作。

2、图的遍历分别用深度优先搜索(DFS)和广度优先搜索(BFS)遍历图,并输出遍历序列。

四、实验步骤(一)线性表的实现与操作1、顺序表的实现首先,定义了一个结构体`SeqList` 来表示顺序表,其中包含一个整数数组`data` 用于存储数据元素,以及一个整数`length` 表示表的当前长度。

在初始化函数`InitSeqList` 中,将表的长度初始化为 0,并分配一定的存储空间给数组。

数据结构求关键路径实习报告参考模板

数据结构求关键路径实习报告参考模板

河南工程学院实习报告系(部)专业班级姓名学号2011 年 7月 1日实习(训)报告评语等级:评阅人:职称:年月日河南工程学院实习(训)报告实习内容:关键路径问题实习时间:自 6 月 27 日至 7 月 1 日共 5 天实习地点:实习单位:指导教师:系主任:目录一、设计目标 (1)二、课题分析与设计 (2)1.课题需求分析 (2)2.存储结构设计 (2)3.算法设计 (3)4.程序流程图 (4)三、程序清单 (5)四、测试 (9)1.测试数据 (9)2.测试结果及分析 (9)五、总结 (11)1.收获 (11)2.不足 (11)3.算法改进分析 (11)一、设计目标用带权有向图构造的AOE网表示一项工程计划,图的结点表示事件,弧表示活动,权值表示活动持续时间。

完成工程的最短时间是从开始点到完成点的最长路径的长度。

路径长度最长的路径叫关键路径。

关键路径上的所有活动都是关键活动。

求关键路径必须在拓扑排序的前提下进行,有环图不能求关键路径;只有缩短关键活动的工期才有可能缩短工期;若一个关键活动不在所有的关键路径上,减少它并不能减少工期;只有在不改变关键路径的前提下,缩短关键活动才能缩短整个工期。

本次实训设计程序,任意给出表示工程计划的顶点及带权弧的有向图信息,即可判断整项工程计划是否合理,求出工程计划中的关键路径及关键活动。

完成整项工程至少需要的时间。

二、课题分析与设计1.课题需求分析1.1问题描述:(1)选取建图的一种算法建立图,有邻接矩阵,邻接表,十字链表,邻接多重表等多种方法,要选取一种适当的方法建立图,才能提高算法效率,降低时间复杂度和空间复杂度。

(2)两个相邻顶点与它们之间的边表示活动,边上的数字表示活动延续的时间。

对于给出的事件AOE网络,要求求出从起点到终点的所有路径,经分析、比较后找出长读最大的路径,从而得出求关键路径的算法,并给出计算机上机实现的源程序。

完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,这个工程才算完成。

数据结构程序设计实验~AOE图的关键路径

数据结构程序设计实验~AOE图的关键路径

数据结构课程设计报告专业网络工程班级姓名学号指导老师评分计算AOE网的关键路径AOE网即边表示活动的网络。

通常,可用AOE网来估算工程计划的完成时间。

如下所示的AOE网包括11项活动,9个事件,每个事件都有所需的完成时间。

我们现在要解决的是:(1)完成整项工程至少需要多少时间(最短时间);(2)哪些活动是影响工程进度的关键(关键活动)。

用e(i)表示活动最早开始时间,l(i)表示活动的最迟开始时间,则l(i)-e(i)为完成该活动的时间余量。

对于本例列表如下:下图就是上述AOE网的关键路径:请编程完成下列工作:1、输入:(1)顶点的信息和入度;(2)AOE网的边(始点、终点和权值)。

2、输出:(1) AOE网的邻接表(按“顶点入度:—>顶点权值”的格式输出)如a 0:-->4 5-->3 4-->2 6(2)输出关键活动每行所显示的分别为开始事件、结束事件、最早开始时间、最迟开始时间和完成活动的时间余量:当l(i)-e(i)=0时,在该行注明为关键活动。

如:a b 0 0 0 关键活动源程序#include<stdio.h>#include<stdlib.h>#include<iomanip.h>#include <process.h>//#define PROJECTNUMBER 9//10//#define PLANNUMBER 11//13typedef struct node{int adjvex;int dut;struct node *next;}edgenode;typedef struct{int projectname;int id;edgenode *link;}vexnode;//vexnode Graphicmap[PROJECTNUMBER];void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber){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("如:3,4,9 回车表示第三节点到第四节点之间的活动用了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;}}int SearchMapPath(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 |",Graphic map[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;}void seekkeyroot(){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);SearchMapPath(Graphicmap,projectnumber,activenumber,totaltime);printf("整个工程所用的最短时间为:%d个单位时间\n",totaltime);system("pause");}int main(){char ch;for(;;){do{system("cls");printf("| 欢迎进入求关键路径算法程序 |");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; }}}。

关键路径实验报告

关键路径实验报告
}
}
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

《关键路径》实验报告

《关键路径》实验报告

在的边。

主函数: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

数据结构实验实训总结报告

数据结构实验实训总结报告

一、实验背景随着计算机技术的飞速发展,数据结构作为计算机科学的重要基础,已经成为现代软件开发和数据处理的关键技术。

为了提高学生的数据结构应用能力,我们学校开设了数据结构实验实训课程。

本课程旨在通过实验实训,使学生深入理解数据结构的基本概念、性质、应用,掌握各种数据结构的实现方法,提高编程能力和解决实际问题的能力。

二、实验内容本次数据结构实验实训主要包括以下内容:1. 数据结构的基本概念和性质通过实验,使学生掌握线性表、栈、队列、串、树、图等基本数据结构的概念、性质和应用场景。

2. 数据结构的存储结构通过实验,使学生熟悉线性表、栈、队列、串、树、图等数据结构的顺序存储和链式存储方法,了解不同存储结构的优缺点。

3. 数据结构的操作算法通过实验,使学生掌握线性表、栈、队列、串、树、图等数据结构的插入、删除、查找、遍历等基本操作算法。

4. 数据结构的实际应用通过实验,使学生了解数据结构在各个领域的应用,如网络数据结构、数据库数据结构、人工智能数据结构等。

三、实验过程1. 实验准备在实验开始前,教师首先对实验内容进行讲解,使学生了解实验目的、实验步骤和实验要求。

同时,教师要求学生预习实验内容,熟悉相关理论知识。

2. 实验实施(1)线性表:通过实现线性表的顺序存储和链式存储,实现插入、删除、查找等操作。

(2)栈和队列:通过实现栈和队列的顺序存储和链式存储,实现入栈、出栈、入队、出队等操作。

(3)串:通过实现串的顺序存储和链式存储,实现串的插入、删除、查找等操作。

(4)树:通过实现二叉树、二叉搜索树、平衡二叉树等,实现树的插入、删除、查找、遍历等操作。

(5)图:通过实现图的邻接矩阵和邻接表存储,实现图的插入、删除、查找、遍历等操作。

3. 实验总结实验结束后,教师组织学生进行实验总结,总结实验过程中的收获和不足,提出改进措施。

四、实验成果通过本次数据结构实验实训,学生取得了以下成果:1. 掌握了数据结构的基本概念、性质和应用场景。

关键路径算法 报告

关键路径算法 报告

数据结构课程设计报告题目:关键路径算法院(系):计算机工程学院专业:计算机科学与技术班级:嵌入式1091学生:吕帅指导教师:寇海洲孙成富邱军林殷路2010年12月目录一、设计目的 (3)二、设计内容 (3)三、程序设计步骤 (4)四、调试分析 (12)五、测试结果 (12)六、课程设计小结 (16)一、设计目的1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。

2、提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

3、初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。

4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

5、培养根据选题需要选择学习书籍,查阅文献资料的自学能力。

二、设计内容1、系统名称:关键路径算法AOE网(即边表示活动的网络),在某些工程估算方面非常有用。

它可以使人们了解:(1)研究某个工程至少需要多少时间?(2)哪些活动是影响工程进度的关键? 在AOE网络中,从源点到汇点的有向路径可能不止一条,但只有各条路径上所有活动都完成了,这个工程才算完成。

因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和,这条路径就叫做关键路径(critical path)。

2、要求:1 以某一工程为蓝本,采用图的结构表示实际的工程计划时间。

2 调查并分析和预测这个工程计划每个阶段的时间。

3 用调查的结果建立AOE网,并用图的形式表示。

4 用CreateGraphic ()函数建立图的邻接表存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中。

5 用SearchMaxPath()函数求出最大路径,并打印出关键路径。

数据结构实验报告

数据结构实验报告

数据结构实验报告摘要:本实验是针对数据结构概念与应用的课程要求进行的,主要目的是通过实践掌握各种数据结构的基本操作和应用场景。

在实验中,我们学习了线性表、栈、队列、二叉树等数据结构,并实现了它们的各种操作。

通过实验,我们深入理解了数据结构的原理和应用,并且掌握了如何在实际项目中应用各种数据结构来解决问题。

1. 引言数据结构是计算机科学中的一个重要概念,它研究如何组织和存储数据以及如何在这些数据上进行操作。

它对于算法的设计和优化起着至关重要的作用。

本次实验旨在通过实践,加深对数据结构的理解,并掌握其基本操作和应用场景。

2. 实验目的本实验的主要目的是:(1) 理解线性表、栈、队列和二叉树等数据结构的概念和特点;(2) 掌握各种数据结构的基本操作,如插入、删除、查找等;(3) 学会在实际项目中应用各种数据结构,解决实际问题。

3. 实验工具本实验使用的工具有:(1) 编程语言:C++;(2) 集成开发环境:Visual Studio;(3) 相关库:标准模板库(STL)。

4. 实验内容和步骤4.1 线性表线性表是最基本的数据结构之一,它包括顺序表和链表两种形式。

在本实验中,我们实现了一个基于顺序表的线性表。

具体步骤如下:(1) 定义线性表的数据结构和基本操作函数;(2) 实现线性表的初始化、插入、删除、查找、修改等基本操作;(3) 编写测试代码,验证线性表的功能和正确性。

4.2 栈栈是一种特殊的线性表,它遵循先进后出(LIFO)的原则。

在本实验中,我们实现了一个基于数组的栈。

具体步骤如下:(1) 定义栈的数据结构和基本操作函数;(2) 实现栈的初始化、入栈、出栈、查看栈顶元素等基本操作;(3) 编写测试代码,验证栈的功能和正确性。

4.3 队列队列是另一种特殊的线性表,它遵循先进先出(FIFO)的原则。

在本实验中,我们实现了一个基于链表的队列。

具体步骤如下:(1) 定义队列的数据结构和基本操作函数;(2) 实现队列的初始化、入队、出队、查看队首元素等基本操作;(3) 编写测试代码,验证队列的功能和正确性。

数据结构实验报告(实验)

数据结构实验报告(实验)

数据结构实验报告(实验)数据结构实验报告(实验)1. 实验目的1.1 理解数据结构的基本概念和操作1.2 学会使用数据结构解决实际问题1.3 掌握常用数据结构的实现和应用2. 实验环境2.1 操作系统:Windows 102.2 编程语言:C++2.3 开发工具:Visual Studio3. 实验内容3.1 实验一:线性表的实现和应用3.1.1 设计并实现线性表的基本操作函数3.1.2 实现线性表的插入、删除、查找等功能 3.1.3 实现线性表的排序算法3.1.4 应用线性表解决实际问题3.2 实验二:栈和队列的实现和应用3.2.1 设计并实现栈的基本操作函数3.2.2 设计并实现队列的基本操作函数3.2.3 实现栈和队列的应用场景3.2.4 比较栈和队列的优缺点3.3 实验三:树的实现和应用3.3.1 设计并实现二叉树的基本操作函数3.3.2 实现二叉树的创建、遍历和查找等功能3.3.3 实现树的遍历算法(前序、中序、后序遍历)3.3.4 应用树解决实际问题4. 数据结构实验结果4.1 实验一的结果4.1.1 线性表的基本操作函数实现情况4.1.2 线性表的插入、删除、查找功能测试结果4.1.3 线性表的排序算法测试结果4.1.4 线性表解决实际问题的应用效果4.2 实验二的结果4.2.1 栈的基本操作函数实现情况4.2.2 队列的基本操作函数实现情况4.2.3 栈和队列的应用场景测试结果4.2.4 栈和队列优缺点的比较结果4.3 实验三的结果4.3.1 二叉树的基本操作函数实现情况4.3.2 二叉树的创建、遍历和查找功能测试结果 4.3.3 树的遍历算法测试结果4.3.4 树解决实际问题的应用效果5. 实验分析与总结5.1 实验问题与解决方案5.2 实验结果分析5.3 实验总结与心得体会6. 附件附件一:实验源代码附件二:实验数据7. 法律名词及注释7.1 版权:著作权法规定的对原创作品享有的权利7.2 专利:国家授予的在一定时间内对新型发明享有独占权利的证书7.3 商标:作为标识企业商品和服务来源的标志的名称、符号、图案等7.4 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。

数据结构课程设计报告---关键路径

数据结构课程设计报告---关键路径

数据结构课程设计Array报告院系:信息管理学院专业:软件工程目录一、问题的描述二、系统需求及分析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)。

关键路径可以很方便的让我们估算出某个工程最短的时间开销,以及这个工程中哪些活动,即哪些项目是主要的,是影响工程进度的关键,从而让我们对工程的实施做出更好的时间安排,并且可以分清主次,抓住核心工程,做到有的放矢。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中的重要基础课程,通过实验可以更深入地理解和掌握数据结构的概念、原理和应用。

本次实验的主要目的包括:1、熟悉常见的数据结构,如链表、栈、队列、树和图等。

2、掌握数据结构的基本操作,如创建、插入、删除、遍历等。

3、提高编程能力和解决实际问题的能力,能够运用合适的数据结构解决具体的问题。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容1、链表的实现与操作单向链表的创建、插入和删除节点。

双向链表的实现和基本操作。

循环链表的特点和应用。

2、栈和队列的实现栈的后进先出特性,实现入栈和出栈操作。

队列的先进先出原则,完成入队和出队功能。

3、树的操作二叉树的创建、遍历(前序、中序、后序)。

二叉搜索树的插入、查找和删除操作。

4、图的表示与遍历邻接矩阵和邻接表表示图。

深度优先搜索和广度优先搜索算法的实现。

四、实验步骤及结果1、链表的实现与操作单向链表:首先,定义了链表节点的结构体,包含数据域和指向下一个节点的指针域。

通过创建链表头节点,并使用循环依次插入新节点,实现了链表的创建。

插入节点时,根据指定位置找到插入点的前一个节点,然后修改指针完成插入操作。

删除节点时,同样找到要删除节点的前一个节点,修改指针完成删除。

实验结果:成功创建、插入和删除了单向链表的节点,并正确输出了链表的内容。

双向链表:双向链表节点结构体增加了指向前一个节点的指针。

创建、插入和删除操作需要同时维护前后两个方向的指针。

实验结果:双向链表的各项操作均正常,能够双向遍历链表。

循环链表:使链表的尾节点指向头节点,形成循环。

在操作时需要特别注意循环的边界条件。

实验结果:成功实现了循环链表的创建和遍历。

2、栈和队列的实现栈:使用数组或链表来实现栈。

入栈操作将元素添加到栈顶,出栈操作取出栈顶元素。

实验结果:能够正确进行入栈和出栈操作,验证了栈的后进先出特性。

数据结构课程设计报告 关键路径的实现

数据结构课程设计报告 关键路径的实现

青岛理工大学数据结构课程设计报告题目:关键路径的实现院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2014.7.8—2014.7.19指导教师: 张艳一、需求分析1.问题描述找出实际工程中的关键路径,合理安排关键活动的施工顺序。

要求:(1)表示工程的图可以用邻接表或邻接矩阵存储;(2)应能以图形的方式输出图;(3)输出关键路径和关键活动。

2.基本功能(1)用邻接表存储有向图并建立AOE网 CreateGraph();(2)用图形的形式输出有向图Display();(3)输出关键路径和关键活动 SearchMapPath();3.输入输出输入: (1)有向图的顶点数和弧数,都是int型,中间用空格隔开;(2)图中的各个顶点的值,char型;(3)图中弧的权值、起点、终点,都是int型,中间用空格隔开;输出:起点(char)、终点(char) 、最早开始时间(int)、最迟开始时间(int)、差值(int)、是否为关键活动、关键路径。

二、概要设计1.设计思路:(1) 输入图的顶点数和弧数。

(2) 输入这个图中每段弧的起始点及权值。

(3) 用输入的数据建立AOE网。

(4) 用邻接表来存储图的这些信息。

(5) 用CreateGraph( )函数建立AOE图。

(6)用Display()函数输出AOE图。

(7) 用SearchMapPath ( )函数求出最长路径,并输出关键路径。

(8) 编写程序。

2.数据结构设计:(1)逻辑结构采用图状的结构。

图是一种较线性表和树更为复杂的数据结构。

在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(即其孩子结点)相关,但只能和上一层中一个元素(即其双亲结点)相关;而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。

关键路径的查找实验报告

关键路径的查找实验报告

中国矿业大学矿业工程学院实验报告课程名称计算机软件设计基础姓名 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");这是这次课程设计中最大的两个遗憾。

不过在操作界面的人性化上,我倒尽可能的做得很完善,无论从美观角度还是方便清楚操作,都实行了非常人性化的方式。

数据库关键路径实验报告

数据库关键路径实验报告

成都信息工程学院计算机系课程实验报告一【上机实验目的】对有向图的拓扑排序和关键路径更加了解以及更好的应用它二【实验环境】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;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");}}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;}七【上机实验中的其他它问题及心得】经过半学期学习数据结构然后做了这个关键路径的小项目,要写出这个小项目必需要平时努力的学好前面的知识,为后面打下基础才能写好这个程序。

关键路径-数据结构课程设计报告

关键路径-数据结构课程设计报告

课程设计报告a)需求分析GreateGraphic():构建AOE网,for(scanf())逐个对图节点信息(包括两邻接点,权值)输入接收,并与分配存储空间。

SearchMapPath()函数:寻找关键路径,构建栈用与存储拓扑排序序列,求得每个节点的相应最早发生时间,最迟完成时间,关键事件的求取,并输出关键路径。

Seekkeyroot()函数:先使用库函数system(‚cls‛)清屏,scanf()对节点数的接收,分配相应的存储空间,调用CreateGraphic()函数和SearchMapPath()函数。

Main()函数:输出主屏信息,判断进入关键路径的程序条件,switch()对条件进行选择。

b)概要设计(1)数据结构typedef struct node{int adjvex;int dut;struct node *next;}edgenode;typedef struct{int projectname;int id;edgenode *lind;}vexnode;(2)程序流程图c)详细设计主函数switch()对条件进行选择判断,进入关键路径的程序,然后对结点数的接收,分配相应的存储空间,构建AOE-网,逐个对图结点信息(包括俩邻接点,权值)输入接收,并与分配存储空间。

寻找关键路径:构建栈用与存储拓扑排序序列,求得每个接点的相应最早发生时间,最迟完成时间,关键事件的求取,并输出关键路径。

d)程序调试(1):C:\Documents and Settings\Administrator\桌面\3\3.cpp(45) : error C2065: 'P' : undeclared identifier (2)C:\Documents and Settings\Administrator\桌面\3\3.cpp(45) : error C2227: left of '->adjvex' must point to class/struct/union(3)C:\Documents and Settings\Administrator\桌面\3\3.cpp(47) : error C2065: 'id' : undeclared identifier 经过仔细的检查,发现45行的‚P‛为大写,我改为小写‘p’以后,运行后只剩下了第三个错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("\n输出AOE网的关键路径:\n");
printf("弧:权值\n");
tag=Criticalpath(g,n); //找关键活动
if(!tag)
printf("AOE网有回路\n");
}
(2)建立AOE网的邻接表函数模块
void create_ALgraph(ALgraph g,int e,int n)
1、基本操作:
(1)void create_ALgraph(ALgraph g,int e,int n)
建立AOE网的邻接表,e为弧的数目,n为顶点数
(2)void oupe_ALgraph(ALgraph g,int n)
输出AOE网的邻接表
(3)int Criticalpath(ALgraph g,int n)
int tpord[VEX_NUM+1]; //顺序队列
int ve[VEX_NUM+1],le[VEX_NUM+1];
int e[ARC_NUM+1],l[ARC_NUM+1];
int front=0,rear=0;//顺序队列的首尾指针初值为0
struct arcnode *p;
for(i=1;i<=n;i++) //各事件最早发生事件初值为0
main()
create_ALgraph(ALgraph g,int e,int n)
oupe_ALgraph(ALgraph g,int n)
Criticalpath(ALgraph g,int n)
3、完整的程序:
#include"stdio.h"
#include"stdlib.h"
#define VEX_NUM 10//定义最大顶点数
p->adjvex=j;
p->dut=w;
p->nextarc=g[i].firstarc; //插入下标为i的边表的第一个结点的位置
g[i].firstarc=p;
}
}
输出AOE网的邻接表函数模块
void oupe_ALgraph(ALgraph g,int n) //输出AOE网的邻接表
{
int i;
{
j=tpord[i];
p=g[j].firstarc;
while(p!=NULL)
{
k=p->adjvex;
if(le[k]-p->dut<le[j])
le[j]=le[k]-p->dut;
p=p->nextarc;
}
}
i=0;
for(j=1;j<=n;j++)
{
p=g[j].firstarc;
while(p!=NULL) //计算各边<Vj-1,Vk>所代表的a(i+1)的e[i]和l[i]
求AOE网的各个关键活动
2、本程序包含两个模块:
(1)主程序模块;
(2)建立AOE网的邻接表、输出AOE网的邻接表、求AOE网的各个关键活动;
(3)模块调用图:主程序模块建立A NhomakorabeaE网的邻接表
输出AOE网的邻接表
求AOE网的各个关键活动
3、流程图
六、详细设计
1、存储类型,元素类型,结点类型:
struct arcnode//声明边表中结点结构
int id; //定点入度
struct arcnode *firstarc;
};
typedef struct node ALgraph[VEX_NUM+1];
void create_ALgraph(ALgraph g,int e,int n)
{ //建立AOE网的邻接表,e为弧的数目,n为顶点数
struct arcnode *p;
int i,j,k,w;
printf("请输入顶点的信息和入度,用空格间隔:");
for(i=1;i<=n;i++) //结点下标从1开始
{
scanf("%d%d",&g[i].data,&g[i].id); //输入顶点信息和入度
g[i].firstarc=NULL;
}
for(k=1;k<=e;k++) //建立边表
{
k=p->adjvex;
e[i]=ve[j];
l[i]=le[k]-p->dut;
if(l[i]==e[i]) //输出关键活动
printf("<v%d,v%d>:%d\n",g[j].data,g[k].data,p->dut);
p=p->nextarc;
i++;
}
}
return 1;
}
3)函数调用关系图
ve[i]=0;
for(i=1;i<=n;i++)
if(g[i].id==0) //入度为0入队列
tpord[++rear]=i;
count=0;
while(front!=rear)
{
front++;
j=tpord[front];
count++;
p=g[j].firstarc;
while(p!=NULL)
g[i].firstarc=p;
}
}
void oupe_ALgraph(ALgraph g,int n) //输出AOE网的邻接表
{
int i;
struct arcnode *p;
for(i=1;i<n;i++)
{
p=g[i].firstarc;
printf("%d,%d->",g[i].data,g[i].id);
三、实验环境
1、硬件配置:Pentium(R) Dual-Core9 CUP E6500 @2.93GHz,1.96的内存
2、软件环境:Microsoft Windows XP Professional Service Pack 3,Microsoft Visual C++ 6.0
四、需求分析
1、输入的形式和输入值的范围:根据题目要求与提示输入所建图的顶点个数和边的个数,用空格间隔,并且所输入的顶点和边的数目不超过定义好的VEX_NUM和ARC_NUM,然后输入顶点的信息和入度以空格为间隔,最后输入每2个顶点以及边的权值。
{
int adjvex;
int dut; //边上的权值
struct arcnode *nextarc;
};
struct node //声明头结点结构
{
int data;
int id; //定点入度
struct arcnode *firstarc;
};
元素类型为整形和指针型。
2、每个模块的分析:
(1)主程序模块:
struct arcnode//声明边表中结点结构
{
int adjvex;
int dut; //边上的权值
struct arcnode *nextarc;
};
struct node //声明头结点结构
{
int data;
int id; //定点入度
struct arcnode *firstarc;
};
}
printf("\n");
}
}
求AOE网的各个关键活动函数模块
int Criticalpath(ALgraph g,int n)//求AOE网的各个关键活动
{
int i,j,k,count;
int tpord[VEX_NUM+1]; //顺序队列
int ve[VEX_NUM+1],le[VEX_NUM+1];
{
printf("请输入边的两个顶点以及边上的权值,用空格间隔:");
scanf("%d%d%d",&i,&j,&w); //输入有向边的两个顶点
p=(struct arcnode *)malloc(sizeof(struct arcnode));
p->adjvex=j;
p->dut=w;
p->nextarc=g[i].firstarc; //插入下标为i的边表的第一个结点的位置
if(g[k].id==0)
tpord[++rear]=k;
p=p->nextarc;
}
}
if(count<n) //该AOE网有回路
return 0;
for(i=1;i<=n;i++) //各事件的最迟发生事件赋初值
le[i]=ve[n];
for(i=n-1;i>=1;i--) //按拓扑序列的逆序取顶点
while(p!=NULL)
{
printf("%3d%3d",p->adjvex,p->dut);
p=p->nextarc; //找下一个邻接点
}
printf("\n");
}
}
int Criticalpath(ALgraph g,int n)//求AOE网的各个关键活动
{
int i,j,k,count;
g[i].firstarc=NULL;
}
for(k=1;k<=e;k++) //建立边表
相关文档
最新文档