长草

链接:

https://www.lanqiao.cn/problems/149/learning/

来源:

蓝桥云课

思路:

利用bfs,先把‘g’入队列,上下左右全部长一根草,加上边界条件,记录需要多少分钟到达这个点,如果超过了跳出,得出的就是最后的结果了。

#include <bits/stdc++.h>

using namespace std;

struct Node
{
    int x ,y;// x轴  y轴
};

char a[1005][1005];
queue<Node> q;
int bk[1005][1005];
int main()
{
    int n ,m ;
    cin >> n >> m;
    for(int i = 1 ; i <= n ;i++){
        for(int j = 1 ; j <=m ; j++){
            cin >> a[i][j] ;
            if(a[i][j]=='g'){
                q.push({i,j});//先把‘g’入队列
                bk[i][j]=1;
            }
        }
    }

    int k ;
    cin >> k;
        while(q.size()){
          Node u =q.front();
          q.pop();
           if(bk[u.x][u.y]==k+1)break;//超过了跳出
          if(u.x>1&&bk[u.x-1][u.y]==0){//上下左右全部长一根草
            bk[u.x-1][u.y] = bk[u.x][u.y]+1;
            q.push({u.x-1,u.y});
          }
          if(u.x<n&&bk[u.x+1][u.y]==0){
            bk[u.x+1][u.y] = bk[u.x][u.y]+1;
            q.push({u.x+1,u.y});
          }

          if(u.y>1&&bk[u.x][u.y-1]==0){
            bk[u.x][u.y-1] = bk[u.x][u.y]+1;
            q.push({u.x,u.y-1});
          }

          if(u.y<m&&bk[u.x][u.y+1]==0){
            bk[u.x][u.y+1] = bk[u.x][u.y]+1;
            q.push({u.x,u.y+1});
          }

        }
     for(int i = 1 ; i <= n ;i++){
        for(int j = 1 ; j <=m ; j++){
            if(bk[i][j]==0) cout << '.';
            else cout << 'g';
        }
        cout << endl;
    }
    return 0;
}```

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐