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 .
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
class Solution {
public:
int dire[4][2] = { { 0, 1 }, { 0, -1 }, { -1, 0 }, {1,0} };
bool isplace(vector<vector<char>>& board,int m, int n)//防止越界
{
int row = board.size();
int col = board[0].size();
return !(m>=row||m<0||n>=col||n<0);
}
void dfs(vector<vector<char>>& board,int x,int y)
{
for (int i = 0; i < 4; i++)
{
int nx = x + dire[i][0];
int ny = y + dire[i][1];
if (isplace(board, nx, ny)&&board[nx][ny]=='O')
{
board[nx][ny] = '*';
dfs(board, nx, ny);
}
}
}
void solve(vector<vector<char>> &board) {
int row = board.size();
if (!row)
return ;
int col = board[0].size();
for (int i = 0; i < col; i++)
{//从最上一行开始搜索
if (board[0][i] == 'O')
{
board[0][i] = '*';
dfs(board, 0, i);
}
}
for (int j = 0; j <row; j++)//左边
{
if (board[j][0]=='O')
{
board[j][0] = '*';
dfs(board, j, 0);
}
}
for (int i = 0; i < col; i++)
{
if (board[row - 1][i] == 'O')
{
board[row - 1][i] = '*';
dfs(board,row-1,i);
}
}
for (int j = 0; j < row; j++)
{
if (board[j][col - 1] == 'O')
{
board[j][col - 1] = '*';
dfs(board, j, col - 1);
}
}
//选择恢复
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (board[i][j] == '*')
board[i][j] = 'O';
else if(board[i][j]=='O')
{
board[i][j] = 'X';
}
}
}
}
};