思路:扫面矩阵的四条边,如果有O,则用DFS遍历,将所有连着的O都变成另一个字符,比如 , 这 样 剩 下 的 O 都 是 被 包 围 的 , 然 后 将 这 些 O 变 成 X , 把 ,这样剩下的O都是被包围的,然后将这些O变成X,把 ,这样剩下的O都是被包围的,然后将这些O变成X,把变回O就行了
class Solution {
public:
void solve(vector<vector<char>>& board) {
for(int i=0;i<board.size();++i)
for(int j=0;j<board[i].size();++j)
{
if((i==0||i==board.size()-1||j==0||j==board[i].size()-1 )&&board[i][j]=='O')
solveDFS(board,i,j);
}
for(int i=0;i<board.size();++i)
for(int j=0;j<board[i].size();++j)
{
if(board[i][j]=='O') board[i][j]='X';
if(board[i][j]=='$') board[i][j]='O';
}
}
void solveDFS(vector<vector<char> >&board,int i,int j)
{
if(board[i][j]=='O')
{
board[i][j]='$';
if(i>0&&board[i-1][j]=='O') solveDFS(board,i-1,j);
if(j+1<board[i].size()&&board[i][j+1]=='O') solveDFS(board,i,j+1);
if(i+1<board.size()&&board[i+1][j]=='O') solveDFS(board,i+1,j);
if(j>1&&board[i][j-1]=='O') solveDFS(board,i,j-1);
}
}
};