长草
题目描述
小明有一块空地,他将这块空地划分为 n行 m列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的
上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。请告诉小明,
k个月后空地上哪些地方有草。
思路
注意使用两个数组,否则会影响第一个月的变化,在进行上下左右改变时,注意判断数组的
大小是否超过范围。
代码
#include <stdio.h>
#include <stdlib.h>
char a[1000][1000],b[1000][1000];
int flag[1000][1000];
int n,m,k;
void f(int x,int y)
{
if(flag[x][y]==1){
if(x+1<n) b[x+1][y]='g';
if(x-1>-1) b[x-1][y]='g';
if(y+1<m) b[x][y+1]='g';
if(y-1>-1) b[x][y-1]='g';
}
}
int main()
{
int i,j;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
getchar();
for(j=0;j<m;j++){
scanf("%c",&a[i][j]);
b[i][j]=a[i][j];
}
}
scanf("%d",&k);
while(k>0)
{
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(a[i][j]=='g'){
flag[i][j]=1;
f(i,j);
}
}
}
k--;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
a[i][j]=b[i][j];
}
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%c",b[i][j]);
}
printf("\n");
}
// 请在此输入您的代码
return 0;
}

浙公网安备 33010602011771号