兰州大学数据结构实验 关键路径实验报告.doc

兰州大学数据结构实验 关键路径实验报告.doc

兰州大学信息科学与工程学院 数据结构实验报告 课程名称 数据结构 实验名称 数据结构实验 专业班级 姓 名 学 号 实验日期 第 日 周 星期 三,四 节 实验地点 贺兰堂 2012—2013学年度第 一 学期 一、实验目的 1、熟悉图的相关知识,加深对图关键路径查找方法的理解 二、实验内容 1、 对于给定的一个工程施工图,该图以边为单位从键盘输入,编写能够找出该图的关键路径的程序。 三、实验环境 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、输入的形式和输入值的范围:根据题目要求与提示输入点和边的数目,然后根据你的图的信息,将边输进程序中。 2、输出的形式:输出关键路径的各个节点。 3、程序所能达到的功能:输出给定图的关键路径。 4、测试数据:输入点和边的数目,以空格隔开,然后输入每条边,边的起点和终点,权以空格隔开,回车,输出关键路径。如: 输入点和边的数目 3 2 输入第一个边的起点,终点 及权 1 2 12 输入第二个边的起点,终点 及权 1 3 16 输出关键路径为. 五、概要设计 为了实现上述操作,应以数组和链表为存储结构,。 1、基本操作: (1)void creatadjlist(adjlist *G,int n,int e) 初始条件:adjlist *G指针形式的指针存在,以及存在节点的数目n, 节点的数目e; 操作结果:建立以adjlist *G为指针的邻接表。 (2)int topsort(adjlist *G,int n) 初始条件:adjlist *G为一已知图的邻接表,n为节点的数目; 操作结果:返回节点的关键路径最后节点的编号。 (3)void creat_path(adjlist *G,int top2,int n) 初始条件:adjlist *G,图最后节点的编号top2,节点的数目n; 操作结果:输出图adjlist *G的关键路径。 2、本程序包含三个模块: (1)主程序模块; (2)构造邻接表函数,寻找关键路径末节点和求各节点事件发生最早时间函数,输出图的关键路径函数模块 (3)模块调用图: 主程序模块 输出图关键路径模块 寻找关键路径末节点和求各节点事件发生最早模块 构造邻接表函数模块 3、流程图 主函数 屏幕输出“请输入点和边的数目” n =点的数目,e =边的数目 设定图类型的指针变量G,并开辟出相应的空间 调用创建邻接表的函数 调用求关键路径最后节点和计算事件发生最早时间的函数 调用输出关键路径的函数 构建邻接表函数 初始条件有图类型的指针G,节点数n,边数e 当i 从0变到节点数 图的结构体数组中每个指向下一个的元素为NULL 设定每个点编号 设定每个节点的入度为0 设定每个节点的最早开始时间为0 当i从0 变到边数e 屏幕输出“请输入地%d边的起点,终点及权” a= 起点b=终点w=权值 设定邻接表节点类型的变量p P的弧头等于b,权值w 标号b-1的邻接表的头节点的入度加一 建立邻接表[a-1]的相应的指向关系 寻找关键路径的最后节点以及计算各个时间的最早发生时间的函数 初始化有邻接表类型的指针G,还有节点数n top1 = 0,top2 = 0,m=0 当i从1变到小于n 是 如果节点的入度为0 否 top1赋值给该节点的入度 i赋值给top1 当top1不等于0 j=top1 top1值赋为编号[j-1]节点的入度 [j-1]节点的入度赋值给top2 top2=j m++ p指向编号为[j-1]头节点邻接表所指向的节点 当p不为空 k = p所在邻接表节点的弧头编号 编号为[k-1]邻接表头节点的入度减一 是 如果编号为[k-1]头节点的入度为0 否 编号为[k-1]头节点的入度赋值为top1 top1 赋值为k 是 编号[k-1]时间小于[j-1]时间加权值 否 [k-1]的时间进行修改 P指向下一个邻接表节点结构体 是 m小于n的值 否 屏幕输出“有回路!” 然会top2的数值 输出关键路径函数 初始条件有图类型的指针G,关键路径最后一个节点top2,节点总数n 设定整形变量endone来记录关键路径最后一个节点的位

文档评论(0)

1亿VIP精品文档

相关文档