Given a 2D boardcontaining'X'and'O', capture all regions surrounded by'X'.
A region is captured by flippingall'O's into'X's in that surrounded region .
For example:
After running your function, theboard should be:
解题思路:
主要就是dfs的应用,唯一的变体是只能从最外侧开始调用dfs,先判断目前的坐标点是否已经行走过,或者是否是’X’。若是直接返回,若不是,就将’o’变为’*’,并设置此坐标已被处理,然后递归调用往四个方向行走。
代码:
void solve(vector<vector<char>> &board) {
if(board.empty())
return;
vector<vector<int> >istravese(board.size(),vector<int>(board[0].size(),0));
for(size_t i=0; i!=board.size(); i++)
{
search(board,istravese,i,0);
search(board,istravese,i,board[0].size()-1);
}
for(size_t i=0; i!=board[0].size(); i++)
{
search(board,istravese,0,i);
search(board,istravese,board.size()-1,i);
}
for(size_t i=0; i!=board.size(); i++)
{
for(size_t j=0; j!=board[0].size(); j++)
board[i][j]=(board[i][j]=='*'?'O':'X');
}
}
void search(vector<vector<char> > &board,vector<vector<int> >&istravese, size_t i, size_t j)
{
if(i<0 || j<0 || i>=board.size()||j>=board[0].size())
return;
if(istravese[i][j] || board[i][j]=='X')
{
istravese[i][j]=1;
return;
}
board[i][j]='*';
istravese[i][j]=1;
search(board,istravese,i-1,j);
search(board,istravese,i+1,j);
search(board,istravese,i,j-1);
search(board,istravese,i,j+1);
}