电梯控制算法(2)单电梯场景——优化扫描算法
电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615
在实际情况下,电梯并不需要扫描所有的楼层,只需要扫描有乘客进出电梯的楼层。
所以,我增加了2个全局变量,用来保存计算出来的电梯上下行的最上下的楼层。
#include <thread>
#include<time.h>#define LEVEL 6
int flag[LEVEL + 1]; //1到Level层的外部输入,取值为0,1,2,3,其中0表示无乘客,1表示有乘客上行,2表示有乘客下行,3表示既有上行又有下行
int dest[LEVEL + 1]; //目的楼层的记录,取值为0,1,其中0表示不是目的地,1表示是目的地
int levelMax, levelMin; //levelMax是进出电梯最大楼层,levelMin是进出电梯最小楼层void input()
{int lev, fla;while (cin >> lev >> fla) if (lev > 0 && lev <= LEVEL){if (fla>0 && fla <= 3)flag[lev] = fla; //外部输入else dest[lev] = 1;//内部输入}
}
void upPull(int loc)//上行接客
{flag[loc]--;cout << "上行接客" << loc << endl;
}
void downPull(int loc)//下行接客
{flag[loc] -= 2;cout << "下行接客" << loc << endl;
}
void push(int loc)//送客
{dest[loc] = 0;cout << "送客" << loc << endl;
}
int getMax()
{levelMax = 0;for (int loc = 1; loc <= LEVEL; loc++){if (flag[loc] || dest[loc])levelMax = max(levelMax, loc);}return levelMax;
}
int getMin()
{levelMin = LEVEL + 1;for (int loc = 1; loc <= LEVEL; loc++){if (flag[loc] || dest[loc])levelMin = min(levelMin, loc);}return levelMin;
}void run()
{int loc = 1;cout << " 当前楼层" << loc << endl;while (1){while (loc <= getMax()){if (flag[loc] == 1 || flag[loc] == 3)upPull(loc);if (dest[loc])push(loc);Sleep(1000);if (loc<getMax())loc++;else break;cout << " 当前楼层" << loc << endl;}while (loc >= getMin()){if (flag[loc] == 2 || flag[loc] == 3)downPull(loc);if (dest[loc])push(loc);Sleep(1000);if (loc > getMin())loc--;else break;cout << " 当前楼层" << loc << endl;}}
}int main()
{thread t1(input);thread t2(run);t1.join();t2.join();return 0;
}
优化点:
(1)电梯并不需要扫描所有的楼层,只需要扫描有乘客进出电梯的楼层。
(2)解决了之前代码在上下行转换时,重复显示当前楼层的问题。
示例1:
示例2:
这个例子乍一看不对劲,实际上是对的。
当3楼上行乘客进入电梯后,如果一段时间之内不输入,电梯就会直接去接别人了。
示例3:
在这样的一个模拟程序中,我们并不知道每一次电梯开门出去了几个人,这也是和实际情况吻合的。
电梯控制算法(2)单电梯场景——优化扫描算法相关推荐
- 电梯控制算法(1)单电梯场景——简单扫描算法
坐电梯小技巧 https://blog.csdn.net/nameofcsdn/article/details/106044619 电梯控制算法(1)单电梯场景--简单扫描算法 https:/ ...
- 电梯控制算法(5)单电梯场景——屏蔽较近楼层进梯请求
电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 我们会遇到这样一种场景: 电梯在下行的时候,5楼乘客在外面按钮下行按 ...
- 电梯控制算法(4)单电梯场景——限层策略
电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 电梯很多都有限层策略,主要是定差限层和高中低限层2种. 单电梯一般不 ...
- 电梯控制算法(7)多电梯场景——两个等价电梯——动态指派
电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 两个电梯是等价的,都是全部楼层可达的. 当有乘客在外面按电梯时,哪个 ...
- 电梯控制算法(8)多电梯场景——双电梯的空闲停靠
电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 如果,两个电梯是等价的,那么,2个电梯的空闲停靠楼层是多少呢? 假设 ...
- 电梯控制算法(6)多电梯场景——两个等价电梯——静态指派
电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 对于多电梯场景,首先我们考虑最简单的情况,即两个电梯是等价的,都是全 ...
- STM32F4单电梯调度系统(扫描算法)
这是第一次做嵌入式相关的东西,使用了STM32F401VE芯片,由于没有板子,只能用Proteus进行仿真,在实现过程中遇到了很多困难. 修改了定时器中断内容,把调度算法放到主函数中,定时器中断只是简 ...
- 面向对象的程序设计-电梯调度系统的设计、优化与测试
面向对象的程序设计(2019)第二单元总结 I 对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...
- java面向对象模拟电梯_面向对象的程序设计-电梯调度系统的设计、优化与测试...
面向对象的程序设计(2019)第二单元总结 I 对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...
最新文章
- BestCoder冠军赛 - 1005 Game 【DP】
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面...
- visual c++ 部分窗口样式设置
- 浅析IT软件项目团队人力资源管理
- java输出动物,求大神帮助输出为什么只有动物名,几条腿,怎么叫,没有汤姆猫叫等...
- python莫比乌斯内接矩形_莫比乌斯反演例题集 ^_^(示例代码)
- 线程池框架-Executor
- VIP客户服务系统设计(外传)——面对变化的“世界”
- php mpm,Ubuntu Apache 切换到php-fpm+mpm_event模式
- 通过kmeans分析出租车数据并调用百度API进行可视化!
- [疑难解答]MSN常见问题及回答(转)
- 手机App性能测试工具Genymotion安卓模拟器使用和简介
- 【自动驾驶】ROS机器人操作系统总结
- 给一个函数求导MATLAB,matlab求导
- Django restframework重写get_serializer_class方法自定义serializer_class
- 计算机word排版实训报告,Word排版实训报告
- 51单片机 ADC0832酒精传感器
- 计算机键盘的tab键是哪个,电脑键盘中的Tab键都有哪些妙用
- 开源推荐 - EAdmin开箱即用的后台UI框架
- 洛谷 P2178 [NOI2015]品酒大会 解题报告