130. 被围绕的区域——DFS

news/2024/7/20 21:30:03 标签: 深度优先, 算法, leetcode, c++
class Solution {
public:
    int rows, columns;
    void solve(vector<vector<char>>& board) {
        rows = board.size();
        columns = board[0].size();
        for(auto i = 0; i < rows; ++i){
            dfs(board, i, 0);   //左边界
            dfs(board, i, columns - 1); //右边界
        }
        for(auto j = 0; j < columns; ++j){
            dfs(board, 0, j);   //上边界
            dfs(board, rows - 1, j);    //下边界
        }
        for(auto i = 0; i < rows; ++i){
            for(auto j = 0; j < columns; ++j){
                if(board[i][j] == 'A')
                    board[i][j] = 'O';
                else if(board[i][j] == 'O')
                    board[i][j] = 'X';
            }
        }
    }
    void dfs(vector<vector<char>>& board, int row, int column){
        //如果超过边界或者不是‘O’
        //只有包含边界上的O的区域才会被保留,先把存在边界上的O的所有区域改为A
        //那么剩下的O就是包裹在内部的,也就是要改为X的
        if(row < 0 || row >= rows || column < 0 || column >= columns || board[row][column] != 'O'){
            return;
        }
        board[row][column] = 'A';   //和边界上的O接触过的都先换成A
        dfs(board, row - 1, column);    //上
        dfs(board, row, column - 1);    //左
        dfs(board, row + 1, column);    //下
        dfs(board, row, column + 1);    //右
    }
};

Accepted
58/58 cases passed (12 ms)
Your runtime beats 69.35 % of cpp submissions
Your memory usage beats 58.44 % of cpp submissions (9.8 MB)


http://www.niftyadmin.cn/n/754629.html

相关文章

分组查询 每组最高的某条记录

需求是 查询每个班 年龄最小的那个人 ,需要显示如下: SQL 语句如下: select id,SUBSTRING_INDEX(GROUP_CONCAT(age order by age),,,1) as age,SUBSTRING_INDEX(GROUP_CONCAT(username order by age),,,1) as userNamefrom personGROUP BY id转载于:https://www.cnblogs.com/re…

一篇难得的关于傅里叶分析的好文

作者&#xff1a;Heinrich 链接&#xff1a;https://zhuanlan.zhihu.com/p/19763358 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 作 者&#xff1a;韩 昊 知 乎&#xff1a;Heinrich 微 博&#xff1a;花生油…

131. 分割回文串——回溯+记忆化搜索

class Solution { public:vector<vector<string>> ans; //答案vector<vector<bool>> flag; //i&#xff0c; j表示i - j是否是回文串vector<string> temp; //子串vector<vector<string>> partition(string s) {int n s.size();…

显卡结构及工作原理详细解读

显卡结构及工作原理详细解读 标签&#xff1a; 显卡三维图像 2016-01-16 20:58 864人阅读 评论(0) 收藏 举报 分类&#xff1a; 3D原理&#xff08;11&#xff09; 什么是显卡&#xff1f; 显卡的工作非常复杂&#xff0c;但其原理和部件很容易理解。在本文中&#xff0c;我…

windows下C++ UI库 UI神器-SOUI

转&#xff1a;http://www.cnblogs.com/setoutsoft/p/4996870.html 前言 在Windows平台上开发客户端产品是一个非常痛苦的过程&#xff0c;特别是还要用C的时候。尽管很多语言很多方法都可以开发Windows桌面程序&#xff0c;目前国内流行的客户端产品都是C开发的&#xff0c;比…

socket 的粘包问题解决方案

粘包&#xff1a; 由于接受recv有最大限制&#xff0c;管道中有大于最大限制字节时&#xff0c; 第二次recv的会是之前残留的信息&#xff0c;这种现象叫做粘包。 TCP协议是面向连接的&#xff0c;面向流的&#xff0c;当在发送数据时接受方不知道要收多少字节的数据&#xff0…

139. 单词拆分——动态规划

class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {auto words unordered_set<string>();for(auto word : wordDict){words.insert(word);}auto dp vector<bool>(s.size() 1); //整体往后一位&#xff0c;所以要多加1个…

计算机图形学(一)

概念&#xff1a; 研究通过计算机将数据转换为图形并在专门显示设备上显示的原理方法和技术的学科 高质量的计算机图形离不开高性能的计算机图形硬件设备。一个图形系统通常是由图形处理器&#xff0c;图形输入设备和输出设备构成。 图形显示设备 * 图形的输出包括图形的显…