为了节省你的时间,请注意哦:
一、输入
1、输入格式,一条命令一行,最后用 0 表示
2、输入 Request 的时间参数,请按照递增的顺序。如果存在递减,则报错;如果有相
等,本人认为现实中可能存在,于是不报错,按照输入的先后顺序调度。
3、输入 Request 中,在电梯外的输入,第一层不允许向下,最高层不允许向上,否则
报错。
4、时间不允许输入浮点数,整数最大为 5 位(10 进制)。
5、已处理超长字符串栈溢出情况。
二、输出
1、输出格式,每隔 0.5 单位时间,输出一次电梯状态,一次输出三个电梯的状态。
2、不管怎么输入,第 0 时刻的输出都为相同的,这涉及边界问题,有不同的理解,不
要说我错。
3、电梯状态中第二个参数表示电梯运行的大的方向,包括上下停,如果在向上的过程
中,顺便停一下,这时仍为 UP,只是第三个参数显示停止(即‘S’)。如果不是顺便停,
那么第二个参数将显示停止(即‘STAY’)。
4、有些边界问题,可以视为停,也可以视为动,所以随便处理了。我自己的各种边界
情况视作的也不同,不要纠错了。
三、调度处理
1、当目标楼层与本楼层相同时,不会合并请求,不认为是顺路,因为 ppt 上认为顺路
不等于该层的情况下发生的。
2、多个相同的任务时,有时候会冲掉后面来的相同的任务,有时候不会。因为老师说
的顺带不是真实的顺带,有些情况不同。不过所有被冲掉的指令我都打印出了。一般上,
简单来说,电梯内部的相同指令会被冲掉,外部的不会,顺路处理时也会冲掉相同的指令。
3、调度策略:
(1)首先如果满足顺带,先进行顺带,选择第一个满足顺带的电梯。因为这里顺带不
增加路程,所以我认为没必要选路程最短的。
(2)如果只有一个电梯空闲,那它接受任务队列里最前端且它可以接受的任务。
(3)如果多台电梯空闲,则判断任务队列最前端任务是电梯内还是外,如果是电梯内
的,且该电梯空闲,则把该任务交给它。如果是电梯外的,则选择运动路程最短的接受。
我这种处理方法应该是比较简单的。因为只有这里用到了运动路程。但是我认为实际中是
很有效的,实际中并不用追求每个电梯路程严格相等,没有必要,所以主要是多台空闲时
首先启动那台的问题。太完美的考虑反而增大了硬件实现的成本。
(4)结合现实,leave,join 应该电梯不运行的时候使用。如果电梯运行时后使用,我
会让电梯从容运行完在 leave。如果产生意想不到的后果,本人不负责。如果 leave 后,再
有该电梯内部的请求,则冲掉,整个程序还能跑。
几个样例:
一
(leave,3,0)
(E_R,1,1,1)
(E_R,2,1,1)
(E_R,4,1,1)
(E_R,9,1,1)