zoukankan      html  css  js  c++  java
  • cf337A Maze

    给一个连通块,删除k个块,使得剩下的块还是连通的

    因为是一个连通块,直接dfs一次即可,同时记录一下dfs当前的块坐标。
    然后转置下坐标的顺序,删除前k个即可
    原理:
    对于一个点,如果能从这个点进行dfs,那么也就是说,可以从这个点向多个方向走,如果删除这个点,那么可能造成不连通。
    但是对于dfs越往后的点,是单方向的,可以删

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    typedef long long lint;
    typedef pair<int, int> pi;
    int n, m, s;
    char str[555][555];
    int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
    bool vis[555][555];
    vector<pi> ord;
    void dfs(int x, int y){
        if(vis[x][y] || str[x][y] == '#') return;
        vis[x][y] = 1;
        ord.push_back(pi(x, y));
        for(int i = 0; i < 4; i++){
            if(x + dx[i] < 0 || x + dx[i] >= n || y + dy[i] < 0 || y + dy[i] >= m) continue;
            dfs(x + dx[i], y + dy[i]);
        }
    }
    
    int main(){
        cin >> n >> m >> s;
        for(int i = 0; i < n; i++) cin >> str[i];
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                if(str[i][j] == '.'){
                    dfs(i, j);
                    reverse(ord.begin(), ord.end());
                    for(int k = 0; k < s; k++){
                        str[ord[k].first][ord[k].second] = 'X';
                    }
                    for(int i = 0; i < n; i++) cout << str[i] << endl;
                    return 0;
                }
            }
        }
    }
    
    
  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/Emcikem/p/13499208.html
Copyright © 2011-2022 走看看