电梯调度中遇到的问题及解决
在这次的作业中,首先输入请求的形式上与寒假作业大为不同,由于不知道n的大小,我就没办法用数组来储存请求,后来能够解决这个问题也是受到了实际电梯的启发,请求数是不确定的,但电梯的楼层是确定的,于是我建了个floor[]的数组,floor[i]的值代表第i层的请求,这样用两个数组就可以储存3*((2^31)-1)组请求。但实际上我用了不止两个数组,因为如果时间还未到请求时间的话是不可以将请求放入队列里的,还未进电梯的请求也同样不能将目的地楼层置入队列。这里便不一一说明,但总体思想大致是这样了。接着便是电梯调度的问题,在寒假作业里,我是让电梯毎次都朝最近的请求楼层走,从最后结果看,虽然不是正确答案但有一定的可行性。不过在本次作业里,电梯只有3层,这样的决策显然没有多大的意义,毕竟如果电梯在顶楼或底楼,那么就只有一个运行方向,如果在一楼,那零楼和二楼必定都是最近的(如果有请求的话)。所以这次我换了一种决策,思路如下,如果只有比当前楼层高或底的请求,那么方向为1或-1;否则保持原方向不变。接着是我在类的成员函数里对一个数据进行了修改,从调试上看,数据被成功修改了,但在主函数里引用这个数据的时候它还是原来的值,目前尚未能解决这个疑问,但我将主函数里引用数据的那段代码放到类里,解决了问题。最后是文件输入输出的问题,我原本用的是fstream in/outFile
和in/outFile.open()
我的预想是这样
然后它的结果是这样的
于是我问了同学,但都没能解决问题,最后一位同学让我使用freopen
,最后得到了我想要的结果。