数据结构程序设计实验~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

#include

#include

#include

//#define PROJECTNUMBER 9//10

//#define PLANNUMBER 11//13

typedef 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

{

Graphicmap[i].projectname=i;

Graphicmap[i].id =0;

Graphicmap[i].link =NULL;

}

printf("某项目的开始到结束在图中的节点输入\n");

printf("如:3,4,9 回车表示第三节点到第四节点之间的活动用了9个单位时间\n"); for(int k=0;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

for(i=0;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

{

printf("\n本程序所建立的图有回路不可计算出关键路径\n");

printf("将退出本程序\n");

return 0;

}

totaltime=ve[projectnumber-1];

for(i=0;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[k]-p->dut ;

p=p->next ;

}

}

i=0;

printf("| 起点 | 终点 | 最早开始时间 | 最迟完成时间 | 差值 | 备

注 |\n");

for(j=0;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; }

}

}

实验报告

算法与数据结构 实验报告 系(院):计算机科学学院 专业班级:软工11102 姓名:潘香杰 学号: 201104449 班级序号: 18 指导教师:詹泽梅老师 实验时间:2013.6.17 - 2013.6.29 实验地点:4号楼5楼机房

目录 1、课程设计目的...................................... 2、设计任务.......................................... 3、设计方案.......................................... 4、实现过程.......................................... 5、测试.............................................. 6、使用说明.......................................... 7、难点与收获........................................ 8、实现代码.......................................... 9、可改进的地方.....................................

算法与数据结构课程设计是在学完数据结构课程之后的实践教学环节。本实践教学是培养学生数据抽象能力,进行复杂程序设计的训练过程。要求学生能对所涉及问题选择合适的数据结构、存储结构及算法,并编写出结构清楚且正确易读的程序,提高程序设计基本技能和技巧。 一.设计目的 1.提高数据抽象能力。根据实际问题,能利用数据结构理论课中所学到的知识选择合适的逻辑结构以及存储结构,并设计出有效解决问题的算法。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 3.初步了解开发过程中问题分析、整体设计、程序编码、测试等基本方法和技能。二.设计任务 设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。内容如下: ①创建无向图的邻接表 ②无向图的深度优先遍历 ③无向创建无向图的邻接矩阵 ④无向图的基本操作及应用 ⑤图的广度优先遍历 1.有向图的基本操作及应用 ①创建有向图的邻接矩阵 ②创建有向图的邻接表 ③拓扑排序 2.无向网的基本操作及应用 ①创建无向网的邻接矩阵 ②创建无向网的邻接表 ③求最小生成树 3.有向网的基本操作及应用 ①创建有向网的邻接矩阵 ②创建有向网的邻接表 ③关键路径 ④单源最短路径 三.设计方案 第一步:根据设计任务,设计DOS菜单,菜单运行成果如图所示:

数据结构课程设计图的遍历和生成树求解

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法课程设计 课程代码: 6014389 题目: 图的遍历和生成树求解实现 年级/专业/班: 学生姓名: 学号: 开始时间: 2012 年 12 月 09 日 完成时间: 2012 年 12 月 26 日 课程设计成绩: 指导教师签名:年月日

目录 摘要 (3) 引言 (4) 1 需求分析 (5) 1.1任务与分析 (5) 1.2测试数据 (5) 2 概要设计 (5) 2.1 ADT描述 (5) 2.2程序模块结构 (7) 软件结构设计: (7) 2.3各功能模块 (7) 3 详细设计 (8) 3.1结构体定义 (19) 3.2 初始化 (22) 3.3 插入操作(四号黑体) (22) 4 调试分析 (22) 5 用户使用说明 (23) 6 测试结果 (24) 结论 (26)

摘要 《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的: ?了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; ?初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; ?提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 这次课程设计我们主要是应用以前学习的数据结构与面向对象程序设计知识,结合起来才完成了这个程序。 因为图是一种较线形表和树更为复杂的数据结构。在线形表中,数据元素之间仅有线性关系,每个元素只有一个直接前驱和一个直接后继,并且在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。因此,本程序是采用邻接矩阵、邻接表、十字链表等多种结构存储来实现对图的存储。采用邻接矩阵即为数组表示法,邻接表和十字链表都是图的一种链式存储结构。对图的遍历分别采用了广度优先遍历和深度优先遍历。 关键词:计算机;图;算法。

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

甘特图实验报告doc

甘特图实验报告 篇一:Project实验报告 Project实验报告 朱曦朦 学号:XX306202412信管1001 实验目的: 通过做出一个标准的实验,了解project的基本运用方法和实验步骤,掌握设定项目的开始日期的基本方法。完成资源的优化配置,实现资源的充分利用。并对工期做一个初步的调整, 提高估计工期的精确度,掌握PERT的方法,实现整个过程(本文来自:https://www.360docs.net/doc/583377022.html, 小草范文网:甘特图实验报告)的最优配置。对甘特图,关键路径等基本定义有一个初步的了解,初步学习到PROJECT的基本内容。 一;定义起始时间: 在定义项目中进行时间的确认: 一直保存至第三步,进行初始化的设定。 二复制新产品模板. 三调整资源的最大单位 修改资源“产品工程设计”的最大单位为200%,并增加资源“生产线”(工时资源,100%,用于完成生产任务,原来工程师需要5小时完成的任务,生产线只要1小时就能完

成,但必须同时配1名产品工程设计进行监控)。 通过视图进入资源工作表,将“产品工程设计”的最大单位改为 200% 在甘特图中未找到工程师,所以未对其进行修改。 三.为了提高估计工期的精确度,采用PERT技术规划项目工期(选取2到3个任务进行规划)。 设置PERT权重 设置后观察得到PERT项工作表。 选取2,3个项目后确定乐观工期,预期工期,悲观工期,通过计算PERT得出结论。 四.分析项目工期由哪些任务决定,确定压缩工期的方法。通过格式中的甘特图向导,对关键路径进行确认,从而得到确定项目工期的任务,由红线显示。编号为2,3,5,6,8,9,10, 11 对项目进行优化,可以通过2种路径,一是调整关键路径的工期,将其缩短。二是删除原有的链接关系,将后面的工期开始时间提前,如下图所示。 篇二:MS Project 上机实验报告 MS Project 上机实验报告 一、工程概况

数据结构实验报告-图的遍历

数据结构实验报告 实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 二、实验内容: 1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。 2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图 3、深度优先遍历第一步中构造的图G,输出得到的节点序列 4、广度优先遍历第一部中构造的图G,输出得到的节点序列 三、实验要求: 1、无向图中的相关信息要从终端以正确的方式输入; 2、具体的输入和输出格式不限; 3、算法要具有较好的健壮性,对错误操作要做适当处理; 4、程序算法作简短的文字注释。 四、程序实现及结果: 1、邻接矩阵: #include #include #define VERTEX_MAX 30 #define MAXSIZE 20 typedef struct { int arcs[VERTEX_MAX][VERTEX_MAX] ; int vexnum,arcnum; } MGraph; void creat_MGraph1(MGraph *g) { int i,j,k; int n,m; printf("请输入顶点数和边数:"); scanf("%d%d",&n,&m); g->vexnum=n; g->arcnum=m; for (i=0;iarcs[i][j]=0;

数据结构实验十一:图实验

一,实验题目 实验十一:图实验 采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径。 二,问题分析 本程序要求采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径,完成这些操作需要解决的关键问题是:用邻接表的形式存储有向图并输出该邻接表。用一个函数实现判断任意两点间是否存在路径。 1,数据的输入形式和输入值的范围:输入的图的结点均为整型。 2,结果的输出形式:输出的是两结点间是否存在路径的情况。 3,测试数据:输入的图的结点个数为:4 输入的图的边得个数为:3 边的信息为:1 2,2 3,3 1 三,概要设计 (1)为了实现上述程序的功能,需要: A,用邻接表的方式构建图 B,深度优先遍历该图的结点 C,判断任意两结点间是否存在路径 (2)本程序包含6个函数: a,主函数main() b,用邻接表建立图函数create_adjlistgraph() c,深度优先搜索遍历函数dfs() d,初始化遍历数组并判断有无通路函数dfs_trave() e,输出邻接表函数print() f,释放邻接表结点空间函数freealgraph() 各函数间关系如右图所示: 四,详细设计 (1)邻接表中的结点类型定义:

typedef struct arcnode{ int adjvex; arcnode *nextarc; }arcnode; (2)邻接表中头结点的类型定义: typedef struct{ char vexdata; arcnode *firstarc; }adjlist; (3)邻接表类型定义: typedef struct{ adjlist vextices[max]; int vexnum,arcnum; }algraph; (4)深度优先搜索遍历函数伪代码: int dfs(algraph *alg,int i,int n){ arcnode *p; visited[i]=1; p=alg->vextices[i].firstarc; while(p!=NULL) { if(visited[p->adjvex]==0){ if(p->adjvex==n) {flag=1; } dfs(alg,p->adjvex,n); if(flag==1) return 1; } p=p->nextarc; } return 0; } (5)初始化遍历数组并判断有无通路函数伪代码: void dfs_trave(algraph *alg,int x,int y){ int i; for(i=0;i<=alg->vexnum;i++) visited[i]=0; dfs(alg,x,y); } 五,源代码 #include "stdio.h" #include "stdlib.h" #include "malloc.h" #define max 100 typedef struct arcnode{ //定义邻接表中的结点类型 int adjvex; //定点信息 arcnode *nextarc; //指向下一个结点的指针nextarc }arcnode; typedef struct{ //定义邻接表中头结点的类型 char vexdata; //头结点的序号 arcnode *firstarc; //定义一个arcnode型指针指向头结点所对应的下一个结点}adjlist; typedef struct{ //定义邻接表类型 adjlist vextices[max]; //定义表头结点数组

project项目管理实验报告

计算机辅助项目管理 课程报告 班级: 学号: 姓名: 指导教师: 完成日期: -

目录 1、项目概况 (2) 1.1项目简介 (3) 1.2项目任务关系、固定成本及资源需求量 (2) 1.3可用资源 (2) 2、项目的实施计划 (3) 2.1初始计划 (3) 2.2初始计划的调整和优化 (5) 3、跟踪监控 3.1第一轮监控 (7) 3.2第二轮监控 (21) 3.3第三轮监控 (25) 3.4第四轮监控 (25) 4、项目完工总结分析报告 4.1总结分析报告 (26) 4.2分析实施和管理的成效 (26) 4.3目标实现措施的分析 (26) 5.学习思考总结 5.1问题思考 (27) 5.2问题分析与总结 (28) PROJECT项目管理课程报告

1、项目概况 1.1项目简介 项目的主要工作是维修某主要道路下一段长约1公里的供水管道,市政局要求电力部门配合施工,同时铺设一条地下电缆,以增加该道路两侧的用电用户。由于该项目是在现有道路上开挖,故市政局决定在回填后顺便铺设新的混凝土路面。为此,专门成立了一个项目管理办公室,以管理、协调该项目。项目内容包括:供水工程、电力工程和道路工程。整个项目从2016年7月1日提交预算报批为开始,市政局希望将项目施工对公众造成的影响降至最低,故希望该项目能在2016年10月底竣工并恢复交通。 1.2项目任务关系、固定成本及资源需求量 项目各项任务逻辑关系及固定成本(设备费、材料费等)、资源需求量如表1。 表1 工程工艺关系、固定成本及所需资源表 编号工序名称固定 成本 紧前 工序 资源需求 技工壮工 人数工日人数工日 1 道路及配套工程 2 准备工作 3 预算报批5000 4 对外公告1500 3 5 开走路上停留 的车辆 2000 4 3 6 6 开挖槽沟50000 5 15 200 7 供水工程5000 8 维修水管50000 6 12 200 35 500 9 压力试验1500 8 5 10 10 电力工程 11 支设新电杆15000 5 5 50 10 75 12 铺设电缆50000 6 8 50 25 150 13 吊装变压器75000 11,12,16 15 100 25 250 14 电力入户25000 13 20 240 20 240 15 道路工程25000 16 剪除树枝1500 5 6 12 17 复铺路面150000 9,12 20 300 30 420 18 恢复交通14,17 预算报批需1周,对外公告需2周时间。 1.3可用资源

数据结构实验---图的储存与遍历

数据结构实验---图的储存与遍历

学号: 姓名: 实验日期: 2016.1.7 实验名称: 图的存贮与遍历 一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 V0 V1 V2 V3 V4 三、附录: 在此贴上调试好的程序。 #include #include #include V0 V1 V4 V3 V2 ??? ? ??? ? ????????=010000000101010 1000100010A 1 0 1 0 3 3 4

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

关键路径的查找实验报告

中国矿业大学矿业工程学院 实验报告 课程名称计算机软件设计基础 姓名 xxxx 班级采矿10-8班学号 xxxxx 日期 2012年10月 成绩教师 xxxx

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)的为关键活动。 总结 首先,关于程序方面,我发现即使对设计思路有了眉目,知道了所要用到的数据结构、用邻接表来存储AOE-网、建立栈来求拓扑序列、输出的拓扑序列的个数少于节点数则有回路等等,要把这些方法写成函数代码,其实还是一件非常不容易的事情。再加上要完善设计思路,构造整个程序框架在内,都是一件工作量非常大的工作。 在处理程序代码的时候,有两个问题始终解决不了。一是程序输入时只能输入整形数据,而非整形的输入则会导致程序异常停止,但是因为整形的输入方式已贯穿整个程序,若要修改只能另外重做整个程序,所以暂不考虑修改,而打算做一个判错系统,判断若非整形的输入则报错;二是第一种错误的解决方案未能成功实行,于网路上搜索到了几种判断是否为整形数据的程序代码,但将其修改融合到求关键路径的程序中,虽然没有错误可以运行,但是却不能正确的报错。 于是,在尝试多种方案却仍不成功的前提下,我只好选择加上提示语,即:printf("请输入某项目的信息,并请用整形数字表示(格式:弧头,

数据结构图的遍历

#include"stdlib.h" #include"stdio.h" #include"malloc.h" #define INFINITY 32767 #define MAX_VERTEX_NUM 20 typedef enum{FALSE,TRUE}visited_hc; typedef enum{DG,DN,UDG,UDN}graphkind_hc; typedef struct arccell_hc {int adj; int*info; }arccell_hc,adjmatrix_hc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct {char vexs[MAX_VERTEX_NUM]; adjmatrix_hc arcs; int vexnum,arcnum; graphkind_hc kind; }mgraph_hc; typedef struct arcnode_hc {int adjvex; struct arcnode_hc *nextarc; int*info; }arcnode_hc; typedef struct vnode_hc {char data; arcnode_hc *firstarc; }vnode_hc,adjlist_hc[MAX_VERTEX_NUM]; typedef struct {adjlist_hc vertices; int vexnum,arcnum; graphkind_hc kind; }algraph_hc; int locatevex_hc(mgraph_hc*g,char v) {int i,k=0; for(i=0;ivexnum;i++) if(g->vexs[i]==v){k=i;i=g->vexnum;} return(k);}

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

Project实验报告

Project实验报告 朱曦朦 学号:2010306202412 信管1001 实验目的: 通过做出一个标准的实验,了解project的基本运用方法和实验步骤,掌握设定项目的开始日期的基本方法。完成资源的优化配置,实现资源的充分利用。并对工期做一个初步的调整, 提高估计工期的精确度,掌握PERT的方法,实现整个过程的最优配置。对甘特图,关键路径等基本定义有一个初步的了解,初步学习到PROJECT的基本内容。 一;定义起始时间:

在定义项目中进行时间的确认: 一直保存至第三步,进行初始化的设定。二复制新产品模板.

三调整资源的最大单位 修改资源“产品工程设计”的最大单位为200%,并增加资源“生产线”(工时资源,100%,用于完成生产任务,原来工程师需要5小时完成的任务,生产线只要1小时就能完成,但必须同时配1名产品工程设计进行监控)。 通过视图进入资源工作表,将“产品工程设计”的最大单位改为200% 在甘特图中未找到工程师,所以未对其进行修改。

三.为了提高估计工期的精确度,采用PERT技术规划项目工期(选取2到3个任务进行规划)。 设置PERT权重 设置后观察得到PERT项工作表。 选取2,3个项目后确定乐观工期,预期工期,悲观工期,通过计算PERT得出结论。

四.分析项目工期由哪些任务决定,确定压缩工期的方法。通过格式中的甘特图向导,对关键路径进行确认,从而得到确定项目工期的任务,由红线显 示。编号为2,3,5,6,8,9,10,11 的链接关系,将后面的工期开始时间提前,如下图所示。

实验总结: 通过按要求做实验,初步掌握的project的基本方法,但大部分还是按照书本的内容照搬,自己缺乏独立的融会贯通并将只是运用到实际甘特图中,并且,在有一些需要拓展的部分自己还是缺乏想法,没能很好地掌握知识。后面还需要多加练习,对制图还有一定的兴趣,但还是缺乏足够的训练。

数据结构课程设计之图的遍历和生成树求解

##大学 数据结构课程设计报告题目:图的遍历和生成树求解 院(系):计算机工程学院 学生: 班级:学号: 起迄日期: 2011.6.20 指导教师:

2010—2011年度第 2 学期 一、需求分析 1.问题描述: 图的遍历和生成树求解实现 图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(及其孩子结点)相关但只能和上一层中一个元素(即双亲结点)相关;而在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 生成树求解主要利用普利姆和克雷斯特算法求解最小生成树,只有强连通图才有生成树。 2.基本功能 1) 先任意创建一个图; 2) 图的DFS,BFS的递归和非递归算法的实现 3) 最小生成树(两个算法)的实现,求连通分量的实现 4) 要求用邻接矩阵、邻接表等多种结构存储实现 3.输入输出

输入数据类型为整型和字符型,输出为整型和字符 二、概要设计 1.设计思路: a.图的邻接矩阵存储:根据所建无向图的结点数n,建立n*n的矩阵,其中元素全是无穷大(int_max),再将边的信息存到数组中。其中无权图的边用1表示,无边用0表示;有全图的边为权值表示,无边用∞表示。 b.图的邻接表存储:将信息通过邻接矩阵转换到邻接表中,即将邻接矩阵的每一行都转成链表的形式将有边的结点进行存储。 c.图的广度优先遍历:假设从图中的某个顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后再访问此邻接点的未被访问的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中还有未被访问的,则另选未被访问的重复以上步骤,是一个非递归过程。 d.图的深度优先遍历:假设从图中某顶点v出发,依依次访问v的邻接顶点,然后再继续访问这个邻接点的系一个邻接点,如此重复,直至所有的点都被访问,这是个递归的过程。 e.图的连通分量:这是对一个非强连通图的遍历,从多个结点出发进行搜索,而每一次从一个新的起始点出发进行搜索过程中得到的顶点访问序列恰为其连通分量的顶点集。本程序利用的图的深度优先遍历算法。 2.数据结构设计: ADT Queue{ 数据对象:D={a i | a i ∈ElemSet,i=1,2,3……,n,n≥0} 数据关系:R1={| a i-1 ,a i ∈D,i=1,2,3,……,n} 基本操作: InitQueue(&Q) 操作结果:构造一个空队列Q。 QueueEmpty(Q) 初始条件:Q为非空队列。 操作结果:若Q为空队列,则返回真,否则为假。 EnQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:插入元素e为Q的新的队尾元素。 DeQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:删除Q的队头元素,并用e返回其值。}ADT Queue

数据结构实验

实验1 (C语言补充实验) 有顺序表A和B,其元素值均按从小到大的升序排列,要求将它们合并成一 个顺序表C,且C的元素也是从小到大的升序排列。 #include main() { intn,m,i=0,j=0,k=0,a[5],b[5],c[10];/* 必须设个m做为数组的输入的计数器,不能用i ,不然进行到while 时i 直接为5*/ for(m=0;m<=4;m++)scanf("%d",&a[m]);// 输入数组a for(m=0;m<=4;m++)scanf("%d",&b[m]);// 输入数组b while(i<5&&j<5) {if(a[i]b[j]){c[k]=b[j];k++;j++;} else{c[k]=a[i];k++;i++;j++;}// 使输入的两组数组中相同的数只输出一 个 } if(i<5) for(n=i;n<5;n++) {c[k]=a[n];k++;} elseif(j<5) for(n=j;n<5;n++) {c[k]=b[n];k++;} for(i=0;i

求A QB #include main() { inti,j,k=0,a[5],b[5],c[5];//A=a[5],B=b[5],A n B=c[5] for(i=0;i<5;i++)scanf("%d",&a[i]);// 输入a 数组 for(i=0;i<5;i++)scanf("%d",&b[i]);〃输入b 数组 for(i=0;i<5;i++) {for(j=0;j<5;j++) if(a[i]==b[j]){c[k]=a[i];k++;}// 当有元素重复时,只取一个放入 c 中} for(i=0;i #defineN4 main() { inti,j,m,k,a[N+1];//k 为最后输出数组的长度变量

数据结构图的遍历实验报告

实验项目名称:图的遍历 一、实验目的 应用所学的知识分析问题、解决问题,学会用建立图并对其进行遍历,提高实际编程能力及程序调试能力。 二、实验容 问题描述:建立有向图,并用深度优先搜索和广度优先搜素。输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。 三、实验仪器与设备 计算机,Code::Blocks。 四、实验原理 用邻接表存储一个图,递归方法深度搜索和用队列进行广度搜索,并输出遍历的结果。 五、实验程序及结果 #define INFINITY 10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include

typedef struct ArCell{ int adj; }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char name[20]; }infotype; typedef struct { infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; int LocateVex(MGraph *G,char* v) { int c = -1,i; for(i=0;ivexnum;i++) if(strcmp(v,G->vexs[i].name)==0) { c=i; break;} return c;} MGraph * CreatUDN(MGraph *G)//初始化图,接受用户输入{ int i,j,k,w; char v1[20],v2[20]; printf("请输入图的顶点数,弧数:"); scanf("%d%d",&G->vexnum,&G->arcnum);

网络计划实验报告

PERT 实验 商业中心建设活动持续时间表 活动紧前活动需要时间(周) A 设计-20 B 批准-10 C 招标A, B8 D 建设C24 E 外装修D8 F 谈判A,B14 G 签约F10 H 区域分割D, G6 I 内装修H12 J 进驻I, E6 正常正常加急加急最大成本/时间 时间成本时间成本减少比率 A*203012808 6.25 B101010100- C*8106162 3.0 D*24 230020 2340410.0 E8110 4 1204 2.5 F141210204 2.0 G1*******- H* 6202254 1.25 I* 12160101702 5.0 J*6106100- 根据以上表格给出的信息,用PERT软件画出项目网络计划图,并进行网络计算与优化设计。

网络计划方法: 大型项目的开发涉及很复杂的项目协调和管理问题,为使项目管理人员对项目进度有全面的了解,进行有效的控制,必须使用科学的管理方法;网络计划法是使用最广泛的方法之一,关键路径法(critical path method 缩写为CPM)和项目评审技术(program evaluation and review technique 缩写为PERT)是两种使用最广泛的网络计划技术。网络计划方法的优点使它适用于生产技术复杂,工作项目繁多,且紧密联系的一些跨部门的工作计划,如:新产品研制开发;大型工程项目建设;生产技术准备;复杂设备的大修计划。 网络计划方法的基本原理: 将工程项目分解为相对独立的活动,根据各活动先后顺序、相互关系以及完成所需时间做出反映项目全貌的网络图;从项目完成全过程着眼,找出影响项目进度的关键活动和关键路线,通过对资源的优化调度,实现对项目实施的有效控制和管理。 网络计划方法的主要功能: 1用网络图描述一个实际项目的管理问题 (画网络图); 2计算项目的最早、最晚完成和开工时间 (网络计算); 3寻找关键活动和关键路径(网络分析); 4根据以上分析对网络进行优化 PERT网络分析法 PERT网络分析法(计划评估和审查审技术,Program Evaluation and Review Technique) PERT(Program Evaluation and Review Technique)即计划评审技术,最早是由美国海军在计划和控制北极星导弹的研制时发展起来的。PERT技术使原先估计的研制北极星潜艇的时间缩短了两年。简单地说,PERT是利用网络分析制定计划以及对计划予以评价的技术,它能协调整个计划的各道工序,合理安排人力、物力、时间、资金,加速计划的完成。在现代计划的编制和分析手段上,PERT被广泛的使用,是现代化管理的重要手段和方法。 一.画网络图 画网络图应注意以下规则: 1、按工作本身的逻辑顺序连接箭线 2、网络图中不允许出现循环线路 3、在网络图中不允许出现代号相同的箭线 4、在一个网络图中只允许有一个起点节点,一般只允许出现一个终点节点(多目标网络图除外) 5、在网络图中不允许出现有双向箭头或无箭头的线段 6、网

数据结构 图的存储、遍历与应用 源代码

实验四图的存储、遍历与应用姓名:班级: 学号:日期:一、实验目的: 二、实验内容: 三、基本思想,原理和算法描述:

四、源程序: (1)邻接矩阵的存储: #include #include #define INFINITY 10000 //定义最大值无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef int AdjMatrix[MAX_VERTEX_NUM ][MAX_VERTEX_NUM ]; typedef struct{ int vexs[MAX_VERTEX_NUM ]; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧或边数 }MGraph; void CreatGragh(MGraph G) //用邻接矩阵构造图 { int i,j,k,w; printf("请输入顶点个数和边数:\n"); scanf("%d %d",&G.vexnum,&G.arcnum); printf("请按顺序输入顶点中间用‘空格’间隔\n"); for(i=0;i #include

数据结构实验 - 图的储存与遍历

一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 三、附录: 在此贴上调试好的程序。 #include #include #include ????????????????=010******* 010101000100010A

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

PROJECT软件实验报告

PROJECT软件实验报告 成绩: 班级: 学号: 姓名: 2006年10月

实验一、项目基本设定与项目工作的安排与设定 一、实验目的 (1)通过实验使学生熟悉Microsoft Project2003的基本功能。 (2)对利用Microsoft Project2003创建项目及进行项目工作的安排与设定有一定掌握与认识。 二、实验内容 主要分为以下3部分: (1)Microsoft Project2003的基本介绍,主要包括:操作界面、常用视图、获得帮助。 (2)自选项目,利用Microsoft Project2003进行项目创建。 (3)利用Microsoft Project2003进行项目工作的安排与设定。包括在项目中建立任务、输入任务的工期、调整任务的层次、设定任务之间的关联性、在任务中加入更多说明。 三、实验步骤 (1)创建一个项目: (2)设置项目的基本信息: (3)日历的新建、日历的关联、日历的优先级、日历的共享: (4)输入任务: (5)周期性任务输入: (6)调整任务的层次关系 (7)显示WBS编码、定制WBS编码: (8)建立树状WBS; (9)输入与设定任务工期 (10)PERT分析; (11)建立任务的逻辑关系 (12)里程碑设定 (13)辅助功能设定(设定任务信息、设定备注信息) (14)任务拆分

实验二、项目资源与成本的分派与设定 一、实验目的 对利用Microsoft Project2003进行项目资源与成本的分派与设定有一定掌握与认识。 二、实验内容 主要分为以下3部分: (1)利用Microsoft Project2003建立项目所需资源。 (2)利用Microsoft Project2003将资源分派到任务中。 (3)利用Microsoft Project2003录入成本信息及查看成本。 三、实验步骤 (1)建立项目所需的资源(工时资源、材料资源): (2)将资源分配到任务中: (3)成本信息录入: (4)查看任务的成本信息; (5)查看项目的总成本信息; (6)输入资源成本在过程中的变化信息; (7)固定成本的输入:

相关文档
最新文档