实现简单电梯调度
实现简单电梯调度
- 新方案更新中请稍后。
GitHub地址
-
本程序基于以下设定:
- 在乘客请求电梯时,电梯才知道乘客的信息。
- 电梯在每秒内会规划好下一秒的行动。
- 电梯不会超载,乘客不会等的不耐烦去走楼梯。
- 电梯可以在运行过程中瞬间掉头。
- 乘客请求时刻为整数时刻。
-
基本思想:
- 模拟电梯的实时过程。
-
程序实现:
- 输入。
- 给所有的乘客按请求时间排一个序。
- 电梯开始运行。
- 判断是否所有人离开电梯。
- 判断是否有乘客请求电梯。
- 判断最佳运行目标。
- 判断是否有乘客上下楼。
- 电梯向目标移动。
- 电梯结束运行。
-
程序信息:
- 程序包括一个头文件,一个头文件中类的实现,和一个主函数。
- 头文件
passager.h
。- 长度25行。
- 包括类:
passager
。 - 成员变量(
public
):id(int)
:记录乘客的编号。isok(int)
:记录乘客的状态,分为0,1,2
三种,00
:还未进入电梯。1
:已经进入了电梯。2
:已经离开了电梯。
floor(int)
:表示请求电梯时所在的楼层。direction(int)
:表示目标楼层。time(int)
:表示请求电梯的时间。goal(int)
:表示此时请求电梯前往的楼层。
- 成员函数(
public
):passager
:构造函数。~passager
:析构函数。call(void)
:- 输入:此时的时间。
- 作用:更新该事件乘客的目标。
in_out(int)
:- 输入:现在的楼层和现在的时间。
- 作用:判断是否有乘客需要进出,并更新乘客的状态。
- 输出:离开的乘客所等待的时间。
- 重载运算符
>>
:- 作用:输入时间,请求电梯时乘客所在的楼层,和目标楼层,并将目标楼层改为
1
或10
。
- 作用:输入时间,请求电梯时乘客所在的楼层,和目标楼层,并将目标楼层改为
- 源文件
passager.cpp
:为passager
类的实现。- 长度:67行。
- 源文件
lift.cpp
:- 长度:124行。
- 变量:
liftgoal(int)
:电梯当前运行目标。nowtime(int)
:当前时间。liftfloor(int)
电梯当前所在楼层。goalid(int)
:电梯当前运行目标的请求乘客编号。sumtime(int)
:总等待时间。
- 函数:
min(void)
:- 输入:五个乘客。
- 作用:给五个乘客按请求时间排一个序。
iscall(void)
;- 输入:五个乘客,现在的时间。
- 作用:更新乘客请求状态。
isopen(bool)
:- 输入:五个乘客,现在的时间,现在的楼层。
- 作用:判断时候开门,并进行上下客。
- 输出:
- 若没有开门返回
flase
。 - 若开门返回
true
。若有乘客下电梯,则返回所有下电梯的乘客等待的时间。
- 若没有开门返回
choice(int)
:- 输入:五个乘客,现在的楼层。
- 作用:判断该向几层行进。
- 输出:返回最合适的目标楼层
isall(bool)
:- 输入:五个乘客。
- 作用:判断是否所有的乘客都离开了电梯。
- 输出:
- 如果有乘客未下电梯,返回
true
。 - 如果有所有乘客都下电梯,返回
flase
。
- 如果有乘客未下电梯,返回