分析
从边界出发的O肯定不会被包围,所以只需要把边界点排除,剩下的都变成X即可。
class Solution {
public:
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
void dfs(int i,int j,vector<vector<char>>& board){
board[i][j]='A';
int m=board.size(),n=board[0].size();
for(int t=0;t<4;t++){
int x=dx[t]+i,y=dy[t]+j;
if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='O'){
board[x][y]='A';
dfs(x,y,board);
}
}
}
void solve(vector<vector<char>>& board) {
int m=board.size(),n=board[0].size();
for(int i=0;i<n;i++){
if(board[0][i]=='O')dfs(0,i,board);
if(board[m-1][i]=='O')dfs(m-1,i,board);
}
for(int i=0;i<m;i++){
if(board[i][0]=='O')dfs(i,0,board);
if(board[i][n-1]=='O')dfs(i,n-1,board);
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(board[i][j]=='O')board[i][j]='X';
else if(board[i][j]=='A')board[i][j]='O';
}
}
}
};