作者:大绿 | 来源:互联网 | 2023-05-16 13:39
假设针对某间教室,试设计一算法模拟同学下课后疏散离开教室的过程(如图1,四周为墙壁,灰色长条区域为课桌,黑色实心圆代表同学)。疏散过程中考虑2个因素影响:(1)每个同学首先选择最近的出口进行疏散;(2
假设针对某间教室,试设计一算法模拟同学下课后疏散离开教室的过程(如图1,四周为墙壁,灰色长条区域为课桌,黑色实心圆代表同学)。疏散过程中考虑2个因素影响:(1)每个同学首先选择最近的出口进行疏散;(2)当该出口聚集了大量同学形成拥塞,这时可能考虑离次近的出口进行疏散。这两方面的权重分别为0.7和0.3。
疏散规则:
(1) 将教室离散成为大小相等的网格,每个同学在单位时间内只能移动一个网格或者保持不动,并且移动方向只能时上、下、左、右(如图2);
(2) 如果某个同学选择的移动目标网格被其他同学占用,那么该同学选择等待;
(3) 如果多个同学同时竞争同一网格,随机选择其中一个同学占用该网格,其余同学保持不动;
(4) 同学不能移动到桌子占用的网格,并且只能通过出口处进行疏散;
(5) 当所有同学疏散完成后,算法结束。
8 个解决方案
这不是基于元胞模型的教室疏散么,采用的是冯诺依曼邻域,格子划分应该是40cm*40cm,利用Ansgar Kirchner等人的Floor Field模型就可以实现,当然也可以有其他模型
这不是什么算法题,没有算法,就是简单的 loop循环嵌套一个for 循环。
你只要有一个基本的数据表格,然后再内层for循环里循环模拟“一个”学生的单独一步(你的规则的2、3、4随便选一)就行了。然后看结果。
这在古老的basic入门课程中,是一个简单的入门“游戏”,供中学生们学习编程。(不包括初始化数据表的代码、打印数据表代码,剩下的控制部分代码)用10~20行左右的代码搞定。
你随便找本20年前的国内流行的Basic或者Pascal或者Fortran的编程科普读物(不是专业读物),例如谭浩强编写的一系列书,都有这类几乎一模一样的题目。(只不过改为细菌的生死问题之类的)