题目要求的是将被'X'包围的'O'替换为‘X’, 则处于边界的‘O’所邻接的'O'均不能被’X‘包围,可以从边界处进行DFS。
代码
class Solution
{
public:
void solve(vector<vector<char>> &board)
{
if(board.empty()||board.size()==0||board[0].size()==0)
return;
int row = board.size();
int col = board[0].size();
for(int i = 0; i < col; ++i)
{
judge4NearNeighbor( board,0,i);
judge4NearNeighbor( board, row-1,i);
}
for(int j = 0; j < row; ++j)
{
judge4NearNeighbor( board,j,0);
judge4NearNeighbor( board, j,col-1);
}
for(int i = 0; i < row; ++i )
for(int j = 0; j < col; ++j)
if(board[i][j]=='Y')
board[i][j] = 'O';
else
board[i][j] = 'X';
}
void judge4NearNeighbor(vector<vector<char>> &board, int i, int j)
{
if(i>=0&&i<=board.size()-1&&j>=0&&j<=board[0].size()-1&&board[i][j]=='O')
{
board[i][j] = 'Y';
judge4NearNeighbor(board, i, j-1);
judge4NearNeighbor(board, i-1, j);
judge4NearNeighbor(board, i, j+1);
judge4NearNeighbor(board, i+1, j);
}
}
};