长草

题目描述
小明有一块空地,他将这块空地划分为 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;
}
posted @ 2022-12-28 16:44  自然力  阅读(159)  评论(0)    收藏  举报