130. Surrounded Regions
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
转载于点击打开链接
思路:如果边缘有'O',则先把'O'附近的所有关联的'O'记作1,然后剩余的'O'就是被包围的,变化为X,再把1->O。
X X X X X X X X X X X X
X X O X -> X X O X -> X X X X
X O X X X 1 X X X O X X
X O X X X 1 X X X O X X
class Solution {
void check(vector<vector<char>> & board, int i,int j, int row, int col)
{
if(board[i][j]=='O'){
board[i][j]='1';
if(i>1)
check(board,i-1,j,row,col);
if(j>1)
check(board,i,j-1,row,col);
if(i+1<row)
check(board,i+1,j,row,col);
if(j+1<col)
check(board,i,j+1,row,col);
}
}
public:
void solve(vector<vector<char>>& board) {
int m=board.size();
if(!m) return;
int n=board[0].size();
for(int i=0;i<m;i++)
{
check(board,i,0,m,n);
if(n>1)
check(board,i,n-1,m,n);
}
for(int j=1;j+1<n;j++)
{
check(board,0,j,m,n);
if(m>1)
check(board,m-1,j,m,n);
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
//if(board[i][j]=='1') board[i][j]='O';
if(board[i][j]=='O') board[i][j]='X';
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(board[i][j]=='1') board[i][j]='O';
// if(board[i][j]=='O') board[i][j]='X';
}
return;
}
};