刷题leetcode系列-130. Surrounded Regions

题目:Given an m x n matrix board containing 'X' and 'O', capture all regions surrounded by 'X'.

A region is captured by flipping all 'O's into 'X's in that surrounded region.
图片说明

运用的知识点:dfs,标记位,二维vector可变长数组,auto使用,nbr二维数组表示四个方向的移动。
首先分部分编程,dfs和解决部分。
dfs:主要用途是设置visited,并且向四个方向寻找合理的结果。
解决部分。
从四个边界dfs修改visited。
此后剩下的O就是没有的了。全部翻成X。
思路关键是让与边界O连接的O变成访问过的,从而避免翻转。

class Solution {
public:
    vector<vector<int>> nbrs = {{0,1},{1,0},{0,-1}, {-1,0}};
    void dfs(vector<vector<char>>& graph, int i,int j, vector<vector<bool>>& visited )
    {
        visited[i][j]  = true;
        for(auto &nbr : nbrs )
        {
            int x = i + nbr[0];
            int y = j + nbr[1];

            if(x < 0 || y < 0 || x >= graph.size() || y >= graph[0].size() || visited[x][y]|| graph[x][y] == 'X')
                continue;
            dfs(graph, x, y, visited);
        }
    }
    void solve(vector<vector<char>>& board) {

        int m = board.size() , n = board[0].size(); 
        vector<vector<bool>> visited(m, vector<bool>(n, false));
        //do dfs from the boundary
        //top and the bottom boundaries
        for(int i = 0;i<n;i++){

            if(!visited[0][i] && board[0][i] == 'O')
                dfs(board, 0,i, visited );
            if(!visited[m-1][i] && board[m-1][i] == 'O')
                dfs(board, m-1,i, visited );                

        }

        //for side boundary
        for(int i = 0;i<m;i++)
        {
            if(!visited[i][0] && board[i][0] == 'O')
                dfs(board, i,0, visited );

            if(!visited[i][n-1] && board[i][n-1] == 'O')
                dfs(board , i, n-1, visited);
        }

        //flip the relevent zero

        for(int i =0;i<m;i++)
        {
            for(int j =0;j<n;j++)
            {
                if(board[i][j] == 'O' && !visited[i][j])
                    board[i][j] = 'X';
            }
        }


    }
};
全部评论

相关推荐

04-02 14:40
浙江大学 设计
无语😓&nbsp;就喜欢找我茬,研究生怎么了&nbsp;研究生就是天才吗&nbsp;就得所有报告文件都会,最烦做表
我推的MK:是这样的,那些领导就是自己什么都不懂就把所有东西扔给你,指望白嫖你的劳动力,如果你的表现不如预期就启动攻击学历模式,这都学不会是怎么考上浙大的
点赞 评论 收藏
分享
我将逐步学习姐妹的语言艺术
一片特立独行的面包:这攻击力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务