思路:
设(i,j)位置有x个细菌,每个细菌只能活一天,但能繁殖出10个后代。所以一天后,(i,j)位置有2x个细菌,(i,j)位置周围8个格子每个位置都会增加x个细菌。 总体来看,就是以(i,j)为中心的9个位置每个位置的细菌数量都增加了(i,j)位置的细菌数量。
定义方向数组,初始方向向上
int dx[8] = {-1,-1, 0,1,1,1,0,-1}, dy[8]={0,1,1,1,0,-1,-1,-1};
核心代码
//记录上一次的状态
for(int i = 1; i <= 9; i++)
for(int j = 1; j <= 9; j++)
b[i][j] = a[i][j];
for(int i = 1; i <= 9; i++)
for(int j = 1; j <= 9; j++){
a[i][j] += b[i][j];//开始遍历前先复制一边中心的细菌
//扩展每个细菌周围
for(int k = 0; k < 8; k++)
{
int x = i + dx[k], y = j + dy[k];
if(x >= 1 && x <= 9 && y >= 1 && y <= 9)
a[x][y] += b[i][j];
}
}