130. Surrounded Regions

来源:互联网 发布:电气女生知乎 编辑:程序博客网 时间:2024/06/05 03:51
/*Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'.A region is captured by flipping all 'O's into 'X's in that surrounded region.For example,X X X XX O O XX X O XX O X XAfter running your function, the board should be:X X X XX X X XX X X XX O X X思路1:采用DFS遍历    从矩阵最外围每个边一次进行DFS遍历,如果值为'O'则把值标记为‘T',并向上下左右四个    方向遍历,当四个方向遍历结束后,遍历整个矩阵,如果值为'O'则标记为'X',如果值为    'T'则标记为'O';*/class Solution {public:    void solve(vector<vector<char>>& board) {        if(board.empty()) return;        int m= board.size(),n= board[0].size();        for(int i=0;i<m;i++){            dfs(board,i,n-1);            dfs(board,i,0);        }        for(int j=0;j<n;j++){            dfs(board,0,j);            dfs(board,m-1,j);        }        for(int i=0;i<m;i++)            for(int j=0;j<n;j++){                if(board[i][j]=='T') board[i][j] = 'O';                else if(board[i][j]=='O') board[i][j] = 'X';            }    }    void dfs(vector<vector<char>>& board,int i,int j){        if(board[i][j] == 'O'){            if(board[i][j]=='O') board[i][j] = 'T';            if(j-1 > 0 ) dfs(board,i,j-1);            if(j+1 < board[0].size()) dfs(board,i,j+1);            if(i-1 > 0 ) dfs(board,i-1,j);            if(i+1 < board.size()) dfs(board,i+1,j);        }       }};
原创粉丝点击