题解:#1902.细菌的繁殖与扩散 审核通过

shaobai 老师 2024-10-08 10:19:26 2024-10-31 17:55:59 13

思路:

设(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];
					}
			}
{{ vote && vote.total.up }}