zoukankan      html  css  js  c++  java
  • 关于电梯调度的设计

    经过讨论和设计,对于多路电梯调度,我们确立了具体的数据结构模型,主要还是采用C-LOCK算法,另外加一个多线程调度。

    数据结构:

    1.考虑到电梯的变化是一个动态变化的过程,那么要在动态过程中实现正常跳转,首先要确定各种跳转的状态, 因而这里我们使用枚举类型来表示电梯的各种状态:

     enum {updownstophomeStatehome};同时初始化最初状态为电梯在楼层一。

    2.对于乘客来说, 显然要有一个进入电梯与走出电梯的队列, 因而在这里我们是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息:

     typedef struct passage

    {

        int now//乘客当前所在的楼层

        int dis//乘客的目的地楼层

        struct passage *next

    } Passage;

    3.虽然电梯中的状态是由枚举类型来实现的, 但是在整个程序的运行过程中,我们还是为电梯设置了一个结构体类型,以便保存更多的信息:

    typedef struct lift

    {  int count_C//计数电梯已到达的层数

       int count_A//电梯人数计数器 记得必须初始化为 0

       int flag_inHigh//二十个楼层有无请求的标志,哪个楼层如果有请求,该标志置 1

       int weight//电梯重量,记得要进行初始化为 0

       int flag_out[High];

     }Lift

    函数接口说明:

    函数中的参数均是使用的全局变量的传递,下面就将设想的主要函数及他们之间的参数的关系列出如下:

    int OutOrIn(Lift &L,Passage *Queue,Passage *LiftQ;//进和出电梯的总函数

    int Update(Lift &L,Passage *Queue,Passage *LiftQ;//刷新的函数

    int Run(Lift &L,Passage *Queue,Passage *LiftQ;//整个电梯各种状态转换的函数

    int OpenTheDoor(Lift &L);//开门

    int CloseTheDoor(Lift &L);//关门

    int Test(Lift &L,Passage *QueuePassage *LiftQ);// 测试电梯关门还是开门的函数

    int Request(Lift &L,Passage *Queue);//发出请求信号的函数

    int ClosestLift((Lift &L);//调度最近的电梯的函数

    int Weight(Lift &L);//计算电梯重量的函数

    开发者:闫立新 苏海岩

  • 相关阅读:
    HDU 4607 Park Visit (DP最长链)
    HDU 4607 Park Visit (DP最长链)
    POJ 2388 Who's in the Middle (快速选择算法:O(N)求数列第K大)
    POJ 2388 Who's in the Middle (快速选择算法:O(N)求数列第K大)
    HDU 4609 3-idiots (FFT-快速傅立叶变换)
    HDU 4609 3-idiots (FFT-快速傅立叶变换)
    POJ 3084 Panic Room (最小割建模)
    POJ 3084 Panic Room (最小割建模)
    POJ 1966 Cable TV Network (无向图点连通度)
    POJ 1966 Cable TV Network (无向图点连通度)
  • 原文地址:https://www.cnblogs.com/suhaiyan/p/3607914.html
Copyright © 2011-2022 走看看