Given a 2D 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.
样例
X X X X
X O O X
X X O X
X O X X
After capture all regions surrounded by 'X'
,
the board should be:
X X X X
X X X X
X X X X
X O X X
class Solution {
public:
/**
* @param board a 2D board containing 'X' and 'O'
* @return void
*/
void surroundedRegions(vector<vector<char>>& board) {
// Write your code here
int m = board.size();
if (m < 1)
{
return;
}
int n = board[0].size();
if (n < 1)
{
return;
}
for (int i = 0; i < n; i++)
{
visit(board, m, n, 0, i);
}
for (int i = 1; i < m-1; i++)
{
visit(board, m, n, i, 0);
}
for (int i = 1; i < m-1; i++)
{
visit(board, m, n, i, n-1);
}
for (int i = 0; i < n; i++)
{
visit(board, m, n, m-1, i);
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
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';
}
}
}
}
private:
void visit(vector<vector<char> > &board, int m, int n, int row, int column)
{
if (row < 0 || row >= m)
{
return;
}
if (column < 0 || column >= n)
{
return;
}
if (board[row][column] != 'O')
{
return;
}
board[row][column] = '1';
visit(board, m, n, row-1, column);
visit(board, m, n, row+1, column);
visit(board, m, n, row, column-1);
visit(board, m, n, row, column+1);
}
};