电梯程序
题目:该大楼有21层,从地面0 , 1 ??, ... 20 。地板0是地下停车场水平, 1楼是大堂的水平。如下是四部电梯的情况
时间表格
时间 | 20140309上午8:30_11:30 | ||
任国庆 | 设计程序的思路 | ||
张博 | 设计程序的思路,编写前期程序博客 |
前期程序设计:
<1>我们组讨论的程序主要思想是要尽可能的使上升的电梯保持上升,下降的电梯保持下降,这样可以减少往返时间的浪费,提高电梯的运行效率;同时我们设置了就绪队列和准备队列,其中就绪队列的优先级大于准备队列的优先级。
<2>内部电梯控制:在内部电梯中如果一个乘客按下电梯按钮是和电梯保持同方向的,则把这个请求放于就绪队列中,如果这个请求和电梯是相反的方向则把这个请求放于准备队列中。例如:现在电梯是向上运行在2层,A乘客要去0层,把请求放于准备队列,电梯继续上升,不会反方向下降;B乘客要去5层,则请求放于就绪队列,优先级大于A乘客,先执行。在这种情况下,我们是牺牲了A乘客的时间,但是我们提高了电梯的运行效率。当然你可能会问:“这样对于A乘客是不公平的”。对于这种情况,我们将会由外部电梯控制调度,基本设想是不能让乘客上这部电梯,这名乘客上的电梯只能是下降电梯。
<3>外部电梯控制:对于外部的控制我们是查找乘客请求的楼层和电梯运行楼层相同的情况,然后把这名乘客位于的楼层数放于电梯的就绪队列中。例如:A乘客在九层请求去往12层,则先要找到上升电梯,其中如果找到二个电梯都是上升,这二个电梯进行比较,哪个离乘客近,就把请求放于该电梯的就绪队列中,缩短了乘客的等待时间。特殊情况:乘客A和乘客B都位于第九层,其中乘客A请求去11层,乘客B去5层,但是一部向上的电梯来了,A、B乘客都上去了, 这样就会导致B乘客浪费大量的时间,所以对于这种情况,我们认为应该要有一个善意的提醒,让B乘客知道如果他选择这部电梯会浪费很多时间,不建议B乘客选择。
数据结构
public struct dianti { public char a; //电梯标号 public int people; //当前人数 public int weight; //电梯重量 public int floor; //当前电梯所在的层数 public int[] jiuxu=new int[100]; //就绪队列 public int[] ready=new int[100]; //准备队列 };
原文:http://www.cnblogs.com/zhangbo2011/p/3589588.html