计算机编程模拟病毒的传播与扩散——北京市第二十中学教科室“科技云课堂”(3)
同学们,冠状病毒属于病毒的一种,它有着很强的传染性,在侵入人体之后也会迅速的繁殖和扩散的,从而导致人的免疫系统受到损害。
冠状病毒图示
那么病毒的繁殖和扩散情况是否可以通过计算机来模拟计算呢?比如:请看下题:
假设在边长为9的正方形培养皿中,正中心位置有m个病毒。我们简化模型假设病毒的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。同学们思考下:如何编程求出经过n(1≤n≤4)天后,病毒在培养皿中的分布情况。
输入
输入为两个整数,第一个整数m表示中心位置病毒的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 4)。
输出
输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后病毒在培养皿上的分布情况
样例输入
<span style="color: black;font-family: "&">2 1
样例输出
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 2 4 2 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
思考与分析:我们可以通过模拟算法,模拟计算出n天后病毒的分布图。
由于病毒其余的均匀分布在其四周相邻的八个单元格中,其坐标变换可抽象为图1,数据结构上我们可以选择二维数组来存储病毒传播时候的方向变化情况,如图2所示:
图1 病毒的坐标变化情况
所以,对应的数组行列坐标变化情况如下:
图2 数组行列坐标变化
我们用一个数组表示当前状态,一个数组表示状态的进行,即增加的数目。那么只需要在原病毒的坐标基础上加上图2这种变化就是新病毒的坐标。具体实现算法思路如下:
枚举天数n
搜索只要数组的某个位置发现了病毒
就枚举8个方向
更新他们的值
更新10个后代中原来位置病毒的数量
数组更新当前状态
详细代码实现参见附件
最后调试如图:
从上面程序不难看出,病毒的繁殖和扩散是很快的,实际中病毒每天繁殖量远不止10个。抗击疫情,同学们要做好自我防护。
在本次课例用到了二维数组,模拟算法等知识,同学们快来动手试试吧!
课程资料下载链接:
链接:https://pan.baidu.com/s/17-PmrVuehD8qpTaheZB1ZQ
提取码:nwl7
北京市第二十中学防控疫情宣传报道组稿件
课程指导教师:张丽辉
图文设计:程磊,张振峰
审核:吴刚
总编:孙玉柱