class Solution {
public:
int n,m;
vector<vector<bool>>ans;
void solve(vector<vector<char>>& board) {
if(board.empty()||board[0].empty())return;
n=board.size(),m=board[0].size();
ans=vector<vector<bool>>(n,vector<bool>(m,false));
for(int i=0;i<m;i++)//对四条边界进行处理
{
if(board[0][i]=='O'&&!ans[0][i])dfs(board,0,i);
if(board[n-1][i]=='O'&&!ans[n-1][i])dfs(board,n-1,i);
}
for(int i=0;i<n;i++)
{
if(board[i][0]=='O'&&!ans[i][0])dfs(board,i,0);
if(board[i][m-1]=='O'&&!ans[i][m-1])dfs(board,i,m-1);
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(!ans[i][j])
board[i][j]='X'; //把没有dfs到的所有变成X;
}
void dfs(vector<vector<char>>& board,int x,int y)
{
ans[x][y]=true;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a>0&&a<n&&b>0&&b<m&&!ans[a][b]&&board[a][b]=='O')
dfs(board,a,b);
}
}
};
09-06