/*
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 X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X 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);
}
}
};
130. Surrounded Regions
最新推荐文章于 2024-01-21 17:09:59 发布