题意读懂了做的很快
繁殖规则:dish【20】【20】为第二天的细菌密度,
dish【i】【j】= dish【i】【j】 + d【dish_copy[i][j]+dish_copy[i-1][j]+dish_copy[i+1][j]
+dish_copy[i][j-1]+dish_copy[i][j+1]】;
dish_copy【20】【20】= dish【20】【20】 //copy
i-1.i+1,j-1,j+1<0或者>=20,对应项记为0;
disht[i][j]<0取0,disht[i][j]>3,取3
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX 20
#define DNAPRO 16
void ArrayCopy(int dis[][MAX],int source[][MAX],int row,int column) //传递引用
{
for(int ii=0;ii<row;ii++)
for (int jj=0;jj<column;jj++)
dis[ii][jj]=source[ii][jj];
};
int main()
{
int dish[MAX][MAX],d[DNAPRO],day,Cases;
int dish_copy[MAX][MAX];
cin>>Cases;
for(int q=0;q<Cases;q++)
{
if(q>0)
cout<<endl;
cin>>day;
memset(d,DNAPRO,sizeof(int));
memset(dish_copy,0,MAX*MAX*sizeof(int));
memset(dish,0,MAX*MAX*sizeof(int));
for (int ii=0;ii<DNAPRO;ii++)
{
cin>>d[ii];
}
for(int ii=0;ii<MAX;ii++)
for (int jj=0;jj<MAX;jj++)
cin>>dish[ii][jj];
while(day--)
{
ArrayCopy(dish_copy,dish,MAX,MAX); //数组拷贝
//----以下处理
for(int ii=0;ii<MAX;ii++)
for (int jj=0;jj<MAX;jj++)
{
int k=dish_copy[ii][jj];
if(ii<MAX-1)
k+=dish_copy[ii+1][jj];
if(ii>0)
k+=dish_copy[ii-1][jj];
if(jj<MAX-1)
k+=dish_copy[ii][jj+1];
if(jj>0)
k+=dish_copy[ii][jj-1];
dish[ii][jj]+=d[k];
if(dish[ii][jj]>3)
dish[ii][jj]=3;
if(dish[ii][jj]<0)
dish[ii][jj]=0;
}
}
for(int ii=0;ii<MAX;ii++)
{
for (int jj=0;jj<MAX;jj++)
{
switch (dish[ii][jj])
{
case 0: cout<<'.';
break;
case 1: cout<<'!';
break;
case 2: cout<<'X';
break;
case 3: cout<<'#';
break;
default:
break;
}
}
cout<<endl;
}
}
}