新冠病毒疫情模拟系统
自2020年来大家最关心的就是新冠疫情了。很多人都想推测一下疫情的发展,但是人的力量是有限的,所以我将利用计算机来模拟x*y规格的城市n天后的疫情最坏情况。
前置假设
一共有三种人:安全者,潜伏者,死者。
- 安全者:只有被感染的可能
- 潜伏者:整个潜伏期中会感染周围的1个人,潜伏期结束后将有10%的几率变成死者
- 死者:就是因为新冠病毒死去的人,没有任何特性
代码
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<cmath>
using namespace std;
int n;
int x,y;
int ans;
int a[1000][1000];
int b[1000][1000];
int f[10][3]={{0,0},{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,-1},{-1,1}};
void input()
{
cin>>n;
cin>>x>>y;
if(x>=1000||y>=1000)
{
cout<<"不支持这么大的区间";
}
else
{
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
a[i][j]=1;
}
}
}
}
int pd(int xx,int yy)
{
return xx>=1&&xx<=x&&yy>=1&&yy<=y;
}
int tf(int z,int m)
{
srand((unsigned)time(NULL));
if(m==1)
{
return rand()%z+1;
}
if(m==2)
{
if(rand()%z+1==20)
{
return 4;
}
else
{
return 1;
}
}
}
void clean()
{
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++)
b[i][j]=0;
}
void chang()
{
//遍历每一个人
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
clean();
if(a[i][j]==2&&b[i][j]==0)
{
int cnt=0;
int bz[10][5];
for(int k=1;k<=8;k++)
{
if(pd(i+f[k][1],j+f[k][2])==1)
{
cnt++;
bz[cnt][1]=i+f[k][1];
bz[cnt][2]=j+f[k][2];
}
}
int xx=tf(cnt,1);
a[bz[xx][1]][bz[xx][2]]=2;
a[i][j]=3;
b[bz[xx][1]][bz[xx][2]]=1;
ans++;
}
else if(a[i][j]==3&&b[i][j]==0)
{
a[i][j]=tf(20,2);
ans--;
}
}
}
}
int main()
{
input();
a[1][1]=2;
int xx=0;
for(int i=1;i<=100;i++)
{
for(int j=1;j<=n;j++) //遍历每一天的情况
{
chang();
}
xx=max(xx,ans);
ans=0;
}
cout<<xx;
return 0;
}
示例
输入:2 2 2(2*2的区间中,病毒流行两天)
输出:4(最坏四人感染)
缺点
这个方法虽然吧整体模拟了下来,但是还有很多细节因为时间原因没有做到:
- 新冠病毒的潜伏期因该是七天,而不是一天
- 新冠病毒中曾经染过病的人发病率会高于常人
- 生活中大家都是会移动的,所以受感染的不一定是周围的人
- 每个人在潜伏期中平均感染1.8个人,而不是一个人
- 可以把输出变得多元化,把它画成一个图的形式
附言
- 大家还有什么改进的方法就请寄到我的邮箱:mishi_xiaolu@163.com,也可以和我交流学术
- 我也是一个B站UP主:https://space.bilibili.com/650914920,大家可以来捧个场[狗头]
- 最后感谢大家来看我的博客ヾ(≧▽≦*)o