这个题就是著名的连通块问题的变形式,稍微变化下即可AC。
代码:
class Solution {
public:
void solve(vector<vector<char>> &board) {
if(board.empty()) return;
int n=board.size();
int m=board[0].size();
vector<vector<int>> v(n,vector<int>(m,0));
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
if(!v[i][j]&&board[i][j]=='O'){
dfs(board,v,i,j,n,m);
}
}
}
void dfs(vector<vector<char>> &board,vector<vector<int>> &v,int x,int y,int n,int m){
int row[4]={-1,0,1,0},col[4]={0,-1,0,1};
queue<pair<int,int>> q;
vector<pair<int,int>> vv;
int flag=1;
q.push(make_pair(x,y));
v[x][y]=1;
while(!q.empty()){
pair<int,int> tem;
tem=q.front();
q.pop();
int xx=tem.first,yy=tem.second;
vv.push_back(make_pair(xx,yy));
if(!xx||xx==n-1||!yy||yy==m-1)
flag=0;
for(int i=0;i<4;i++){
int x1=xx+row[i],y1=yy+col[i];
if(x1>=0&&x1<n&&y1>=0&&y1<m&&!v[x1][y1]&&board[x1][y1]=='O'){
q.push(make_pair(x1,y1));
v[x1][y1]=1;
}
}
}
if(flag){
for(int i=0;i<vv.size();i++)
board[vv[i].first][vv[i].second]='X';
}
}
};