电梯调度算法
电梯调度算法

目录一、算法设计 (1)1.算法思想 (1)2.运行环境 (1)3.问题描述 (1)二、实验步骤及方法 (1)三、源程序代码 (2)四、运行结果图 (15)五、课程总结 (15)一、算法设计1.算法思想本算法设计一部电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。
如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼停住。
同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。
随后再搭载去反方向的乘客,以此实现电梯的升降操作。
2.运行环境本程序用java语言、eclipse平台编写。
3.问题描述电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。
具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;反之。
二、实验步骤及方法1.由于鼠标单击每个楼层按钮时,需要作出相应的动作,所以我们使用jbutton按钮类,通过jbutton的单击事件来模拟楼层按钮并通过改变颜色来表示按钮是否被按下2.使用数组存储每个按钮的状态,1表示被按下,0表示未被按下。
用于电梯是否到达目标层的判断,及按钮颜色的刷新判断;3.“电梯”也是一个jbutton类,通过改变颜色来模拟电梯的运行,需要在此类中设置一个方向值,用0,1,2分别表示电梯的停止向上向下运行。
三、源程序代码import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.util.*;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.Timer;public class Lifta{/*** @param args*/public static void main(String[] args){Brick brick=new Brick();} }class Brick{ //方块类public int octime=0; //计算开关门事件。
多电梯调度算法

多电梯调度算法
多电梯调度算法是一个用于控制多个电梯在一个大楼中高效运行的系统。
这个系统可以根据乘客的需求和楼层情况,智能地决定每个电梯应该去哪一层接乘客或者送乘客。
为了实现这一目标,多电梯调度算法可以采用以下策略:
1. 电梯最近停留楼层策略:当有新请求到来时,电梯会优先选择最近停留的楼层。
这样可以最大程度地减少电梯的等候时间和行程时间。
2. 同方向优先策略:当电梯到达某一楼层接乘客后,如果有相同方向的请求,电梯会优先选择同方向的请求而不会改变方向。
这样可以避免不必要的方向转变,提高效率。
3. 最小耗能策略:电梯在每一次移动时,会选择耗能最小的方向。
通过计算每个方向上的耗能,并综合考虑每个电梯的负载情况和楼层的请求情况,来选择耗能最小的方向。
4. 动态调整电梯数量策略:当需求量较小时,只开启少部分电梯。
而当需求量增加时,可以动态调整电梯的数量,以满足乘客的需求。
这样可以降低能源消耗和运营成本。
5. 紧急优先策略:当有紧急请求到来时,例如火警或者地震预警,系统会立即将所有电梯调度到底层,以最快速度将所有人员安全地送离建筑物。
通过以上策略的综合运用,多电梯调度算法可以实现电梯的高效运行,节约能源和时间,提供更好的乘坐体验。
该算法还可以根据实际情况进行调整和优化,以满足不同大楼的需求。
电梯调度算法总结

电梯调度算法总结⼀:任务要求本次的程序任务和要求如上图所⽰,需要有4部电梯同时运⾏,每部电梯都有⾃⼰的限制且被同⼀控制器所控制,希望有图形显⽰效果,本次的任务我们组已经完成,关于编程的历程与总结现在就⼀⼀道来。
⼆:初步构想阶段我们先尝试解决最核⼼的问题,即电梯的调度算法问题,初步构思是这样的,电梯根据当前控制器内所要到的楼层信息判断是向下运⾏或向上运⾏,并向上或向下运⾏⾄控制器内楼层的最⼤或最⼩值,期间出现的所有楼层信息都加⼊到控制器内,若有⽐最值更⼤或更⼩的信息不予理会,只是加⼊控制器中,每到⼀楼层就判断控制器内是否有该楼层,有则在该层停留,并移除控制器内该层信息,⽆则继续运⾏,运⾏⾄最值处,重新从控制器内找出最值,并判断向上或向下运⾏,如此循环。
当控制器内没有信息后,电梯等待⼀段时间后会回到初值处。
代码如下:1public void down()//定义⼀个下降函数便于复⽤2 {3for(;cout>=con.getmin();cout--)4 {5 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);6if(con.getlist(this.mode).contains(cout))7 {8 con.remove(cout);9 System.out.println("到达"+cout+"层");10 changepeople();11try {12 Thread.sleep(500);13 } catch (InterruptedException e) {14// TODO Auto-generated catch block15 e.printStackTrace();16 }17if(cout==con.getmin())18break;19 }20if(cout==con.getmin())21break;22try {23 Thread.sleep(200);24 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.white);25 } catch (InterruptedException e) {26// TODO Auto-generated catch block27 e.printStackTrace();28 }29 }30 }31public void run() //电梯运⾏算法主要运⾏函数32 {33while(true)34 {35while(!con.getlist(this.mode).isEmpty())36 {37 con.setmami();38if(con.getmax()>cout) //和下⾯的if组成判断电梯是否向上运⾏否则向下运⾏39 {40if(con.getmin()>cout||(con.getmax()-cout)<=(cout-con.getmin()))41 {42for(;cout<=con.getmax();cout++)43 {44 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black); 45if(con.getlist(this.mode).contains(cout))46 {47 con.remove(cout);48 System.out.println("到达"+cout+"层");49 changepeople();50try {51 Thread.sleep(500);52 } catch (InterruptedException e) {53// TODO Auto-generated catch block54 e.printStackTrace();55 }56if(cout==con.getmax())57break;58 }59if(cout==con.getmax())60break;61try {62 Thread.sleep(200);63 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.white);64 } catch (InterruptedException e) {65// TODO Auto-generated catch block66 e.printStackTrace();67 }68 }69 }70else71 down();72 }73else//电梯向下运⾏的算法74 down();75 }76try {77 Thread.sleep(1000);78 } catch (InterruptedException e) {79// TODO Auto-generated catch block80 e.printStackTrace();}81while(con.getlist(this.mode).isEmpty()&&cout!=incout) //⽆任务回到初始楼层的函数82 {83 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.white);84if(cout>incout)85 {86 cout--;87 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);88try {89 Thread.sleep(200);90 } catch (InterruptedException e) {91// TODO Auto-generated catch block92 e.printStackTrace();93 }94 }95if(cout<incout)96 {97 cout++;98 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);99try {100 Thread.sleep(200);101 } catch (InterruptedException e) {102// TODO Auto-generated catch block103 e.printStackTrace();104 }105 }106 }107 }108 }109 }我这⾥是从全部完成后的代码上截取出的算法部分,有图形显⽰的代码和⼀些实现其他功能的代码,初步构想时只是做出了算法,并在dos模拟。
电梯调度设计思路及算法:

电梯调度设计思路及算法:
将电梯作为一个类,声明四个对象,即四部电梯。
电梯类中属性:当前所在楼层(可用高度得出);
可承载最多人数;
可承载最大重量;
当前状态(可用速度,高度,皆有正负表示);
电梯类中函数:判断是否去接乘客(参数为乘客所在楼层数),{是否同向或静止};
计算当前所在楼层和乘客所在楼层之间差距(返回差距,在主函数中比较);
判断电梯是否超过电梯承载限额;
在一定时间内无人使用回到一层;
修改当前状态;
电梯运行中(参数为电梯内乘客所按层数),此函数为重载函数(参数个数不同);
主函数:
当乘客在电梯外按下上下键按钮时,四个电梯对象判断是否去接ta,在有电梯接的情况下,比较哪个最快到达;
若有相同的,则以乘客所按的那部电梯为标准;
若四部电梯都接不了,则等待至其中一部电梯进入可接状态。
乘客进入后按下要到的楼层,电梯进入运行中。
另一批乘客开始坐电梯,,,,,。
实验八 电梯调度算法

.实验八电梯调度算法.一、实验目的1) 掌握电梯调度算法相关理论;2) 设计程序模拟电梯调度算法过程.二、实验主要设备及使用要求按操作计算机的要求使用好计算机设备。
.三、实验原理或算法(一)磁盘调度主要思想扫描算法(SCAN)SCAN 算法又称电梯调度算法。
SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。
“电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。
这好比乘电梯,如果电梯已向上运动到4层时,依次有3位乘客陈生、伍生、张生在等候乘电梯。
他们的要求是:陈生在2层等待去10层;伍生在5层等待去底层;张生在8层等待15层。
由于电梯目前运动方向是向上,所以电梯的形成是先把乘客张生从8层带到15层,然后电梯换成下行方向,把乘客伍生从5层带到底层,电梯最后再调换方向,把乘客陈生从2层送到10层。
仍用前述的同一例子来讨论采用“电梯调度”算法的情况。
由于磁盘移动臂的初始方向有两个,而该算法是与移动臂方向有关,所以分成两种情况来讨论。
〈1〉.移动臂由里向外移动开始时在50号柱面执行操作的读写磁头的移动臂方向是由里向外,趋向32号柱面的位置,因此,当访问50号柱面的操作结束后,沿臂移动方向最近的柱面是 32号柱面。
所以应先为32号柱面的访问者服务,然后是为15号柱面的访问者服务。
之后,由于在向外移方向已无访问等待者,故改变移动臂的方向,由外向里依次为各访问者服务。
在这种情况下为等待访问者服务的次序是61、99、130、148、159、199。
〈2〉.移动臂由外向里移动开始时,正在50号柱面执行操作的读写磁头的移动臂是由外向里(即向柱面号增大的内圈方向)趋向61号柱面的位置,因此,当访问50号柱面的操作结束后,沿臂移动方向最近的柱面是61号柱面。
电梯调度算法总结(大全五篇)

电梯调度算法总结(大全五篇)第一篇:电梯调度算法总结1.传统电梯调度算法1.1先来先服务算法(FCFS)先来先服务(FCFS-First Come First Serve)算法,是一种随即服务算法,它不仅仅没有对寻找楼层进行优化,也没有实时性的特征,它是一种最简单的电梯调度算法。
它根据乘客请求乘坐电梯的先后次序进行调度。
此算法的优点是公平、简单,且每个乘客的请求都能依次地得到处理,不会出现某一乘客的请求长期得不到满足的情况[12]。
这种方法在载荷较轻松的环境下,性能尚可接受,但是在载荷较大的情况下,这种算法的性能就会严重下降,甚至恶化。
人们之所以研究这种在载荷较大的情况下几乎不可用的算法,有两个原因:(1)任何调度算法在请求队列长度为1时,请求速率极低或相邻请求的间隔为无穷大时使用先来先服务算法既对调度效率不会产生影响,而且实现这种算法极其简单。
(2)先来先服务算法可以作为衡量其他算法的标准。
1.2最短寻找楼层时间优先算法(SSTF)最短寻找楼层时间优先(SSTF-Shortest Seek Time First)[14]算法,它注重电梯寻找楼层的优化。
最短寻找楼层时间优先算法选择下一个服务对象的原则是最短寻找楼层的时间。
这样请求队列中距当前能够最先到达的楼层的请求信号就是下一个服务对象。
在重载荷的情况下,最短寻找楼层时间优先算法的平均响应时间较短,但响应时间的方差较大,原因是队列中的某些请求可能长时间得不到响应,出现所谓的“饿死”现象。
1.3扫描算法(SCAN)扫描算法(SCAN)是一种按照楼层顺序依次服务请求,它让电梯在最底层和最顶层之间连续往返运行,在运行过程中响应处在于电梯运行方向相同的各楼层上的请求。
它进行寻找楼层的优化,效率比较高,但它是一个非实时算法。
扫描算法较好地解决了电梯移动的问题,在这个算法中,每个电梯响应乘客请求使乘客获得服务的次序是由其发出请求的乘客的位置与当前电梯位置之间的距离来决定的,所有的与电梯运行方向相同的乘客的请求在一次电向上运行或向下运行的过程中完成,免去了电梯频繁的来回移动[2]。
电梯调度算法

电梯调度算法
1.最省电算法,当一台电梯自下而上运行时,不同楼层的人呼叫电
梯时,出行方向与电梯运行方向一致的用户并且电梯所在楼层小于呼叫楼层将被响应,电梯方向反向运行后,出行方向与电梯一致的用户且电梯所在楼层大于呼叫楼层将被响应,电梯如此循环往复运行以最省电算法响应呼叫用户。
2.先按先服务算法,根据客户所按楼层电梯呼叫按钮的先后顺序做
出响应,谁先请求,先响应谁,并且后按的如果在电梯顺便的情况下(电梯还未到达且电梯运动方向与请求方向一致时)可以响应后按按钮用户的请请求。
3.优先级服务算法,给予不同楼层不同的优先级,优先级高的楼层
用户呼叫首先响应,同优先级相同楼层按先按先服务算法调度,优先级高的用户服务完后再服务优先低的用户提出申请,同一优先级用户按先按先服务算法调度,电梯内的请求可以划为一类优先级。
4.特权级服务算法,给予不同楼层及电梯内用户不同优先级,优先
级高的用户的要求满足后,再服务优先级低的用户,直至最后一级客户的请求被响应。
电梯优先调度算法

电梯优先调度算法电梯调度算法(ms InterView)移臂调度算法包括以下四种:1)先来先服务算法:根据访问者提出访问请求的先后次序来决定执行次序。
2)最短寻找时间优先调度算法:从等待的访问者中挑选寻找时间最短的那个请求执行,而不管访问者的先后次序。
3)电梯调度扫描算法:从移动臂当前位置沿移动方向选择最近的那个柱面的访问者来执行,若该方向上无请求访问时,就改变移动方向再选择。
4)单向扫描调度算法:从0柱面开始往里单向扫描,扫到哪个执行哪个。
*/// t1.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include"math.h"#include"stdlib.h"#include"string.h"struct Head{int nPosition;bool bVisited;};void Visit(struct Head *pHead){printf("visite cy:%d\n",pHead->nPosition); pHead->bVisited=true;}int ReadInputKeyboard(struct Head *pHead,int *pCurrentPosition,int nMaxNumber){int i;printf("please input Current position:");scanf("%d",pCurrentPosition);printf("please input will visit position:");for(i=0;i<nMaxNumber;i++){scanf("%d",&pHead[i].nPosition);pHead[i].bVisited=false;if(pHead[i].nPosition<0)break;}return i;}int ReadInputFile(struct Head *pHead,int *pCurrentPosition,int nMaxNumber){int i;char szFileName[256],*q,*p,szTemp[20];printf("please input filename:");scanf("%s",szFileName);FILE *pFile=fopen(szFileName,"r");if(pFile==NULL){printf("open file %s error",szFileName); return -1;}for(i=0;!feof(pFile) &&i<nMaxNumber;) {p=szFileName;fgets(p,256,pFile);while(q=strchr(p,',')){memset(szTemp,0,sizeof(szTemp)*sizeof(char)); strncpy(szTemp,p,q-p);p=q+1;if(i==0)*pCurrentPosition=atoi(szTemp);else{pHead[i-1].nPosition=atoi(szTemp);pHead[i-1].bVisited=false;}i++;}memset(szTemp,0,sizeof(szTemp)*sizeof(char));pHead[i-1].nPosition=atoi(p);pHead[i-1].bVisited=false;//i++;}fclose(pFile);return i;}int FifoVisit(int nCurrentPosition,struct Head *pHead,int nNumber) {//先来先服务int nHaveVisited=0;int nMoveDistance=0;int i;while(nHaveVisited<nNumber){for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;Visit(&pHead[i]);nHaveVisited++;nMoveDistance+=abs(nCurrentPosition-pHead[i].nPosition); nCurrentPosition=pHead[i].nPosition;}}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int SsfoVisit(int nCurrentPosition,struct Head *pHead,int nNumber) {// 最短寻找时间优先int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited<nNumber){nMinDistance=0xffff;nMinIndex=0;//找最小值for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)) {nMinDistance=abs(pHead[i].nPosition-nCurrentPosition); nMinIndex=i;}//访问Visit(&pHead[nMinIndex]);nHaveVisited++;nMoveDistance+=nMinDistance;nCurrentPosition=pHead[nMinIndex].nPosition;}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int DtVisit(int nCurrentPosition,bool bOut,struct Head *pHead,int nNumber){//电梯调度算法int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited<nNumber)nMinDistance=0xffff;nMinIndex=0;//找最小值for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;if(bOut&&pHead[i].nPosition<nCurrentPosition||!bOut&am p;&pHead[i].nPosition>nCurrentPosition){if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;}}}if(nMinDistance==0xffff){bOut=!bOut;continue;}//访问Visit(&pHead[nMinIndex]);nHaveVisited++;nMoveDistance+=nMinDistance;nCurrentPosition=pHead[nMinIndex].nPosition;}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int DxVisit(int nCurrentPosition,struct Head *pHead,int nNumber) {//单向调度算法int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited<nNumber){nMinDistance=0xffff;nMinIndex=0;//找最小值for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;if(pHead[i].nPosition>nCurrentPosition ){if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)) {nMinDistance=abs(pHead[i].nPosition-nCurrentPosition); nMinIndex=i;}}}if(nMinDistance==0xffff){nMoveDistance+=199-nCurrentPosition;nCurrentPosition=0;continue;}//访问Visit(&pHead[nMinIndex]);nHaveVisited++;nMoveDistance+=nMinDistance;nCurrentPosition=pHead[nMinIndex].nPosition;}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int main(int argc, char* argv[]){//p114struct Head mylist[20];//={98,false,183,false,37,false,122,false,14,false,124,false,65,f alse,67,false};//int nCurrentPosition=53;//int nRealNumber=8;int nCurrentPosition=0;int nRealNumber=ReadInputFile(mylist,&nCurrentPosition,20);// FifoVisit(nCurrentPosition,mylist,nRealNumber);// SsfoVisit(nCurrentPosition,mylist,nRealNumber);//DtVisit(nCurrentPosition,false,mylist,nRealNumber);DxVisit(nCurrentPosition,mylist,nRealNumber);return 0;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
江西师范大学计算机信息工程学院学生实验报告
专业_ 计算机科学与技术姓名___马化梁学号____1308092042 日期__2015.6.5_ 课程名称操作系统实验室名称X4313
实验名称设备管理-电梯调度算法
指导教师朱明华成绩
1、实验目的
本实验要求学生设计一个电梯调度算法来模拟实现磁盘移臂调度过程。
2、实验原理和内容
任何一个对磁盘的访问请求,应给出访问磁盘的存储空间地址:柱面号、磁头号和扇区号。
在启动磁盘执行I/O操作时,应先把移动臂移动到指定的柱面,再等待指定的扇区旋转到磁头位置下,最后让指定的磁头进行读/写,完成信息传送。
移臂调度是根据访问者指定的柱面位置来决定执行次序的调度。
3、实验步骤
(1)弄清实验要求及目的;
(2)想清思路;
(3)设计代码;
(4)实现代码。
4、程序及运行结果(或实验数据记录及分析)
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=1024;
int N,a[maxn];
int main()
{
int flag=1,m;
while(flag)
{
cout<<"电梯调度算法"<<endl;
cout<<"请输入需要访问的柱面数"<<endl;
cin>>N;
cout<<"请输入相应的柱面号"<<endl;
for(int i=0;i<N;i++)
cin>>a[i];
sort(a,a+N);
cout<<"请输入执行I/O操作的起始位置(柱面号)"<<endl;
int x,flag1=1;
while(flag1)
{
int flag2=0;
cin>>x;
for(int i=0;i<N;i++)
if(a[i]==x) m=i,flag2=1;
if(!flag2)
{
cout<<"此起始位置不存在,请重新输入"<<endl;
flag1=1;
}
else
{
cout<<"请输入磁头移动方向1或-1(1代表磁头从外往内移动,-1代表磁头由内往外移动)"<<endl;
int y,sum=0;
cin>>y;
if(y==1)
{
for(int i=m+1;i<N;i++)
{
sum+=(a[i]-a[i-1]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j<=i;j++)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
sum+=a[N-1]-a[m-1];
for(int i=m-2;i>=0;i--)
{
sum+=(a[i+1]-a[i]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j<N;j++)
cout<<a[j]<<" ";
for(int j=m-1;j>=i;j--)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
}
else
{
for(int i=m-1;i>=0;i--)
{
sum+=(a[i+1]-a[i]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j>=i;j--)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
sum+=a[m+1]-a[0];
for(int i=m+2;i<N;i++)
{
sum+=(a[i]-a[i-1]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j>=0;j--)
cout<<a[j]<<" ";
for(int j=m+1;j<=i;j++)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
}
flag1=0;
}
}
cout<<"电梯调度算法结束,是否继续(Y or N):"<<endl;
char z;
cin>>z;
if(z=='Y'||z=='y') flag=1;
else flag=0;
}
return 0;
}。