其他分享
首页 > 其他分享> > 新冠病毒疫情模拟系统

新冠病毒疫情模拟系统

作者:互联网

新冠病毒疫情模拟系统

自2020年来大家最关心的就是新冠疫情了。很多人都想推测一下疫情的发展,但是人的力量是有限的,所以我将利用计算机来模拟x*y规格的城市n天后的疫情最坏情况。

前置假设

一共有三种人:安全者,潜伏者,死者。

代码

#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. 新冠病毒的潜伏期因该是七天,而不是一天
  2. 新冠病毒中曾经染过病的人发病率会高于常人
  3. 生活中大家都是会移动的,所以受感染的不一定是周围的人
  4. 每个人在潜伏期中平均感染1.8个人,而不是一个人
  5. 可以把输出变得多元化,把它画成一个图的形式

附言

标签:cnt,疫情,int,新冠,xx,模拟系统,bz,1000
来源: https://blog.csdn.net/small_Turtle/article/details/113422098