• 长草


    问题描述
    小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
      小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
      这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
      请告诉小明,k 个月后空地上哪些地方有草。
    输入格式
      输入的第一行包含两个整数 n, m。
      接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。
      接下来包含一个整数 k。
    输出格式
      输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。
    样例输入
    4 5
    .g...
    .....
    ..g..
    .....
    2
    样例输出
    gggg.
    gggg.
    ggggg
    .ggg.
    评测用例规模与约定
      对于 30% 的评测用例,2 <= n, m <= 20。
      对于 70% 的评测用例,2 <= n, m <= 100。
      对于所有评测用例,2 <= n, m <= 1000,1 <= k <= 1000。

    #include<iostream>
    #include<queue>
    #include<cstring>
    
    using namespace std;
    
    #define PII pair<int, int>
    #define x first
    #define y second
    
    const int N = 1010;
    char g[N][N];
    int level[N][N];
    int n, m, k;
    queue<PII> q;
    int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
    
    void bfs(){
        while(q.size()){
            auto h = q.front();
            q.pop();
            
            if(level[h.x][h.y] == k + 1) return;
            
            for(int i = 0; i < 4; i ++){
                int x = h.x + dx[i], y = h.y + dy[i];
                if(x < 0 || y < 0 || x >= n || y >= m || level[x][y] || g[x][y] == 'g') continue;
                level[x][y] = level[h.x][h.y] + 1;
                g[x][y] = 'g';
                q.push({x, y});
            }
        }
    }
    
    int main(){
        cin >> n >> m;
        
        for(int i = 0; i < n; i ++) cin >> g[i];
        
        for(int i = 0; i < n; i ++)
            for(int j = 0; j < m; j ++)
                if(g[i][j] == 'g'){
                    q.push({i, j});
                    level[i][j] = 1;
                }
    
        cin >> k;
        
        bfs();
        
        for(int i = 0; i < n; i ++) puts(g[i]);
        
        return 0;
    }
    
  • 相关阅读:
    dev 调用汉化资源
    GridViewDataHyperLinkColumn 显示与内容分离
    gmail 邮箱找回方法
    C# 拼接 in 查询字符串
    asp.net ajax
    解决vmware 因为网络问题而引起的异常
    从改工具到改模型
    Orchard源码:EventBus&EventHandler
    AutoResetEvent和ManualResetEvent理解
    缓存设计
  • 原文地址:https://www.cnblogs.com/tomori/p/13693823.html
Copyright © 2020-2023  润新知