class Elevator {
private: int now;//表示电梯是否空闲;0为空闲,1为工作;
int floor;//表示电梯所在层数;最小为1;最大为21;
int director;//表示电梯方向,0为空闲;1为向上,-1为向下;
int people;//电梯内的人数;最多为14人;
int waite[21];//表示在正在等待使用电梯的所在人的层数;0为该层无人等待,1为该层有人等待;
int aim[21];//表示电梯所需要工作的目的层数;每个单位内,0为无人在该层停靠,N为有N人在该层停靠;
}
struct Floor{
int num; //该楼层待载人数
int aim[21]; //该楼层待载人数的目的地
} 页面有四个电梯,操作流程如下:
首先在n层点选自己所在的按键楼层n。waite[n]=1;
后弹出另一个窗口,要求选择欲前往楼层int x以及所搭乘电梯的编号e,点击确定;
e电梯默认初始停靠在一层,收到指示后,Elevator.now=1,改为工作状态;
遍历数组waite[],电梯行往该层,由于默认为第一层,所以电梯开始工作方向向上,derector=1;
停靠在该层三秒等待人上电梯,之后传输参数x=aim[x],使aim[欲到达目的地的楼层数]>0,aim[其他不停靠的楼层]=0;
x若大于floor,则电梯向上移动,director=1;小于则向下移动director=-1;
正常工作时,电梯驶向目的楼层,途中如经过楼层waite[]>0且欲前往目的地aim[]与电梯驶向相同的楼层,即所到达目的地aim[]与derector相同(如Floor.aim[x]>floor,Elevator.derector=1或者Floor.aim[x]<floor,Elevator.derector=-1),停靠,记录人数与aim[];
电梯每到达aim[]后,停靠,该楼层aim[]清零;此时判断,当director=1时,若存在x>floor,有aim[x]>0或者waite[x]=1,继续向上行驶;若所有的waite[]=0且aim[]=0时,电梯闲置。否则,则有y<Elevator.floor,存在aim[y]>0或waite[y]=1,则电梯变换方向向下,director=-1,电梯行至aim[y](y<floor)或waite[y](y<floor且该层人欲到达目的地与方向相同)。
进行以上重复工作,在每层楼判断方向;
原文:http://www.cnblogs.com/barserker/p/3589576.html