当前位置:文档之家› 综合实验实验报告

综合实验实验报告

如下为数据文件的运行情况:
五.图形绘制(与之前的实验相同):
本实验的图形界面用函数库实现。
1.图形库安装:
及以上的版本都已经带有了所需要的图形库,使用时只需要将他们加入到工程中即可,加入方法如下:
打开文件,在编译的同时建立工程
如图所示打开“”
在项的:中加入
如图所示:
2.先绘制木板,用竖线隔开表示每台机器
三.算法伪代码:
( ; < ; )对所有的工件所有的工序进行操作
( ; < ; ){扫描所有的工件
( ){说明是第一个工序,记录开始时间为
;
([][][][]);插入到机器队列中
();机器操作,计算时间
}{
[][] [][];开始时间最少是上一个工序的结束时间
([][][][]);除第一个工序外的所有工序
还未分配空间,不能使用。要么定义一个节点,要么用分配。
.函数一定要用返回值判断其是否出错,其返回实际接受的变量个数,出错处理时一定要清空缓冲区();
程序中维护的数据结构如下图所示,共有两个,一个用来保存所有工件的所有工序,
另一个用来表示机器加工工序。
在图一中共有六个工件~以及每个工件有个工序,图上方的箭头表示移动的指针,每个移动一个工序,由于图一中的数组元素结构体设计如下:
{机器节点定义
;当前的加工的最后时间
*;维护一个工件链表
};
因此对于每个可以加工的工序,可以直接链入图二中的链表中不需要另外申请空间。
:所需时间总和:秒秒
:所需时间总和秒:秒
:所需时间总和秒:秒
:所需时间总和秒:秒
:所需时间总和秒:秒
:所需时间总和秒:秒
:所需时间总和秒:秒
:所需时间总和秒:秒
:所需时间总和秒:秒
:所需时间总和秒:秒
由于所给的数据*均不大,故程序运行时间都很小,验证了时间复杂度为(*)的结论实验时每次显示一道工序在所有工件在上的完成情况。按下键盘的“向下方向键“显示下一道工序
本程序使用贪心算法实现,程序所有的工件所有的工序保存在一个二维数组中,并且维护一个指针,该指针每次走动一个工序时间,这样的一次走动将产生个工序需要加工,其中为工件数目,将这个工件放到相应的个机器上,在ห้องสมุดไป่ตู้机器按照加工时间递增排序,之所以选择递增排序,是想让每个工序尽可能快的通过他所需要的机器,即可以让该机器上的工序可以更快的加工,也可以让他之后的工序可能更快的在其他机器上进行加工,当然这样的设计只是直观上的说明,并不能得到最优解。
综合实验实验报告

厦门大学计算机科学系级四班
一.问题描述:
算法的综合应用
问题描述:
有台不同的机器,个不同的工件。每个工件有多道工序,每道工序由指定的机器在固定的时间内完成。一道工序一旦开始处理,就不能中断。每台机器一次只能处理一道工序。一个调度就是决定每台机器上工序的处理顺序,使得机器完成所有工件的时间最短。具体的,该问题就是要求在满足()、()两个约束条件的前提下,确定每台机器上工序的顺序,使加工的时间跨度(从开始加工到全部工件都加工完所需要的时间)达到最小。其中,()表示工件约束条件:对每个工件而言,机器对它的加工路线是事先确定的;()表示机器约束条件:对每台机器而言,一次只能对一道工序进行加工。
要求:
利用所学的算法求解该问题,任给一个输入实例,能输出最短时间以及每台机器上工序的加工顺序。
能设计出一个用户界面。
二.算法思路:
原先考虑过用回溯法进行解体,解空间树是所有工件的所有工序的一棵排列树,但这样如果没有好的剪枝函数是不可能实现的,因为这样实现的话时间复杂度将是(^),其中为机器数,为工件数,题目能用的剪枝函数的设计是每个工件的加工次序是有要求的,个人预测需要用到线性规划的内容,最后没有如此实现。
();机器操作
}
}
()
{
.从文件中读取所有工件所有工序的信息,存入二维数组中,程序中的数组为临时变量。
.每次在每个工件上移动一个工序,将产生的个工件放到相应的个机器上,在个机器按照加工时间递增排序
.();在机器上进行操作,记录时间.算出所有完成的时间总和并用绘制图形。
}
四.计算结果:
由于本实验室个完全问题,本程序用贪心算法求出其近似时间总和,算法的时间复杂度为(),空间复杂度为(*),由于程序运行时间非常小,故人为地增加睡眠时间秒
.每次绘制一道工序在每台机器上的加工情况,按下键盘的“向下方向键“显示下一道工序
.每个工序所用的颜色都是不同的,各种颜色都是随机生成的
();动态创建二位数组,用于存放颜色
( ; < ; ){
[][] (()) ;
[][] (()) ;
[][] (()) ;
}
六.实验总结:
.在对字符串操作时把指针传入其他函数时,在其他函数中的操作只影响*
而不影响原来在字符串中的位置,切记切记!!
.同():不要企图传入一个变量名并在函数给该变量赋值,要用指针实现这种功能.
.出错处理:输出出错信息并提前返回
.()函数释放内存空间后并没有返回值,原来的指针指向是不确定的,用手动添加;
.切记不要只定义一个指向结构体的指针为给他分配空间就加以使用。
如:*;
> ;
(图一)
(图二)
图二表示共有四个机器,每个机器头指针后面链接一个链表,链表元素为每个工件且每个工件按照加工时间递增排序。对于图一中的指针走动,产生的工序加入图二加工,图二加工完成后,图一中指针继续走动,直到图一中没有其他工序。
由以上分许,程序只需要对所有工件的所有工序扫描一遍即可算出最后完成加工的时间,故程序的时间复杂度为(*),空间复杂度为(*)。.
相关主题