电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615

电梯很多都有限层策略,主要是定差限层和高中低限层2种。

单电梯一般不怎么需要限层,但是为了更好的理解,还是写一写。

限层的实现:用avail数组记录可达楼层,在输入时直接屏蔽不可达楼层。

在输入时屏蔽,而不是在运行时再跳过不可达楼层,是有道理的,有些电梯直接就是拿东西盖住了,不可达的楼层就是按不了,或者高中低限层电梯,其他楼层根本就没有对应按钮,所以我的模拟思路是在输入时进行屏蔽,这是合理的。

#include<iostream>
#include<queue>
#include<map>
#include<vector>
#include<string>
#include<windows.h>
#include<set>
#include<functional>
#include<set>
#include<math.h>
using namespace std;#include <thread>
#include<time.h>#define LEVEL 16
#define PARK 1  //空闲停靠楼层
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是进出电梯最小楼层
int avail[LEVEL + 1]; //可达楼层,取值为0,1,其中0表示不是可达楼层,1表示是可达楼层void input()
{int lev, fla;while (cin >> lev >> fla) if (lev > 0 && lev <= LEVEL){if (avail[lev] == 0)continue;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;
}
bool isPark()//是否为空闲状态
{return getMax() <= 0 || getMax() > LEVEL;
}
int getMax2()//进出电梯最大楼层
{if (isPark())return PARK;return getMax();
}
int getMin2()//进出电梯最小楼层
{if (isPark())return PARK;return getMin();
}
void initAvail()
{for (int i = 1; i <= LEVEL; i++){avail[i] = i % 2;}
}
void run()
{initAvail();int loc = 1;cout << "    当前楼层" << loc << endl;while (1){while (loc <= getMax2()){if (flag[loc] == 1 || flag[loc] == 3)upPull(loc);if (dest[loc])push(loc);Sleep(1000);if (loc<getMax2())loc++;else break;cout << "    当前楼层" << loc << endl;}while (loc >= getMin2()){if (flag[loc] == 2 || flag[loc] == 3)downPull(loc);if (dest[loc])push(loc);Sleep(1000);if (loc > getMin2())loc--;else break;cout << "    当前楼层" << loc << endl;}}
}int main()
{thread t1(input);thread t2(run);t1.join();t2.join();return 0;
}

这里以只停奇数楼层为例:

输入8 0会被屏蔽,输入8 3也会被屏蔽。

电梯控制算法(4)单电梯场景——限层策略相关推荐

  1. 电梯控制算法(1)单电梯场景——简单扫描算法

    坐电梯小技巧   https://blog.csdn.net/nameofcsdn/article/details/106044619 电梯控制算法(1)单电梯场景--简单扫描算法   https:/ ...

  2. 电梯控制算法(6)多电梯场景——两个等价电梯——静态指派

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 对于多电梯场景,首先我们考虑最简单的情况,即两个电梯是等价的,都是全 ...

  3. 电梯控制算法(5)单电梯场景——屏蔽较近楼层进梯请求

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 我们会遇到这样一种场景: 电梯在下行的时候,5楼乘客在外面按钮下行按 ...

  4. 电梯控制算法(2)单电梯场景——优化扫描算法

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 在实际情况下,电梯并不需要扫描所有的楼层,只需要扫描有乘客进出电梯的 ...

  5. 电梯控制算法(8)多电梯场景——双电梯的空闲停靠

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 如果,两个电梯是等价的,那么,2个电梯的空闲停靠楼层是多少呢? 假设 ...

  6. 电梯控制算法(7)多电梯场景——两个等价电梯——动态指派

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 两个电梯是等价的,都是全部楼层可达的. 当有乘客在外面按电梯时,哪个 ...

  7. plc四层单电梯课程设计

    四层单电梯的PLC 控制 摘要:电梯作为我们日常生活中最常见也最必不可少的生活工具,它极大地方便了我们的生活.现代电梯主要由曳引机(绞车).导轨.对重装置.安全装置(如限速器.安全钳和缓冲器等).信号 ...

  8. java 电梯类图_Java实现目的选层电梯的调度

    一.前言 本次博客我将简单介绍一下前两次的电梯作业,并简单解析一下我的程序结构,进一步对我的第二次作业的算法核心和一些想法做一些分享,我的电梯设计算法并不是由调度器来决定电梯的捎带与否,而是由电梯自主 ...

  9. 二部六层电梯程序西门子1200二部六层电梯程序,无需eet可直接仿真使用

    二部六层电梯程序西门子1200二部六层电梯程序,无需eet可直接仿真使用,含有联控功能,有简单方案说明. 另有三部六层电梯程序 YID:1348645720626558笑叹红尘丨

最新文章

  1. 远心镜头技术及其选型介绍
  2. SQLServer2008安装失败的解决办法
  3. java 平均值_Java岗招聘标准差强人意,薪资比拼,Java程序员表示“我太难了”...
  4. python利器的使用-图文详解python开发利器之ulipad的使用实践
  5. 初学Java Web开发,请远离各种框架,从Servlet开发
  6. iso linux 内核版本号_Linux内核全面介绍
  7. Docker Nacos Mysql集群
  8. php学习----运算符
  9. 2017.6.15 数字表格 思考记录
  10. 深度学习基础(三)—— 权值矩阵的初始化
  11. python成员变量_Python——成员变量
  12. 源码:Qt开发的离线软件注册机 适用于工业设备。
  13. 操作系统学习笔记:操作系统基础知识
  14. 【深度学习】神经网络的学习过程
  15. QPainter实现简单的绘图程序(绘图工具)
  16. 页面之间的跳转方式和参数传递以及路由和生命周期
  17. 计算机怎么查文件打印记录表,win10系统查看打印机打印历史记录的设置教程
  18. 强大的grep用法详解:grep与正则表达式
  19. 【Java的反射机制】
  20. mybatis XML 中大于等于小于等于的写法

热门文章

  1. 高中数学必修2;解析几何高考热点_逆袭高考
  2. CTSC2018游记
  3. 清华大学计算机陈立杰,陈立杰:从网瘾少年蜕变为清华学霸,24岁最佳论文奖“连中三元”...
  4. 【1元玩景点】去厦门,就去惠和石文化园。感受不一般的石文化、不一般的惠安文化!
  5. 盈利模式不清晰 本身是个伪需求 共享充电宝不过是场资本游戏
  6. 计算机教师考调试题及答案,小学数学教师选调进城考试模拟试卷(含答案)-
  7. LCR数字电桥测量兆欧级高阻值抗电阻的原因分析
  8. 爬虫再体验--爬取当当书籍--进阶篇
  9. 探花交友11-实现推荐系统
  10. 人脸识别评价指标计算