zoukankan      html  css  js  c++  java
  • 长草

    问题描述
    小明有一块空地,他将这块空地划分为 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;
    }
    
  • 相关阅读:
    FEniCS 1.1.0 发布,计算算术模型
    Piwik 1.10 发布,增加社交网站统计
    淘宝褚霸谈做技术的心态
    CyanogenMod 10.1 M1 发布
    Druid 发布 0.2.11 版本,数据库连接池
    GNU Gatekeeper 3.2 发布
    Phalcon 0.9.0 BETA版本发布,新增大量功能
    EUGene 2.6.1 发布,UML 模型操作工具
    CVSps 3.10 发布,CVS 资料库更改收集
    Opera 移动版将采用 WebKit 引擎
  • 原文地址:https://www.cnblogs.com/tomori/p/13693823.html
Copyright © 2011-2022 走看看