实现简单电梯调度

实现简单电梯调度


  • 本程序基于以下设定:

    • 在乘客请求电梯时,电梯才知道乘客的信息。
    • 电梯在每秒内会规划好下一秒的行动。
    • 电梯不会超载,乘客不会等的不耐烦去走楼梯。
    • 电梯可以在运行过程中瞬间掉头。
    • 乘客请求时刻为整数时刻。
  • 基本思想:

    • 模拟电梯的实时过程。
  • 程序实现:

    • 输入。
    • 给所有的乘客按请求时间排一个序。
    • 电梯开始运行。
      • 判断是否所有人离开电梯。
      • 判断是否有乘客请求电梯。
      • 判断最佳运行目标。
      • 判断是否有乘客上下楼。
      • 电梯向目标移动。
    • 电梯结束运行。
  • 程序信息:

    • 程序包括一个头文件,一个头文件中类的实现,和一个主函数。
    • 头文件 passager.h
      • 长度25行。
      • 包括类:passager
      • 成员变量(public):
        • id(int):记录乘客的编号。
        • isok(int):记录乘客的状态,分为0,1,2三种,0
          • 0:还未进入电梯。
          • 1:已经进入了电梯。
          • 2:已经离开了电梯。
        • floor(int):表示请求电梯时所在的楼层。
        • direction(int):表示目标楼层。
        • time(int):表示请求电梯的时间。
        • goal(int):表示此时请求电梯前往的楼层。
      • 成员函数(public):
        • passager:构造函数。
        • ~passager:析构函数。
        • call(void)
          • 输入:此时的时间。
          • 作用:更新该事件乘客的目标。
        • in_out(int)
          • 输入:现在的楼层和现在的时间。
          • 作用:判断是否有乘客需要进出,并更新乘客的状态。
          • 输出:离开的乘客所等待的时间。
        • 重载运算符>>:
          • 作用:输入时间,请求电梯时乘客所在的楼层,和目标楼层,并将目标楼层改为110
    • 源文件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
原文地址:https://www.cnblogs.com/jhy16193335/p/8426760.html