题目
题解
- 题意:与边界相连的‘O’不进行填充,内部的‘O’进行填充
- 可以将边界以及相连的‘O’找出,并替换为其他字母,最后统一进行改变
代码
// class Solution {
// public:
// int xx[4]={0,0,1,-1};
// int yy[4]={1,-1,0,0};
// void solve(vector<vector<char>>& board) {
// int m=board.size();
// int n=board[0].size();
// queue<pair<int,int>> que;
// for(int i=0;i<m;i++){
// if(board[i][0]=='O'){
// que.push({i,0});
// board[i][0]='A';
// }
// if(board[i][n-1]=='O'){
// que.push({i,n-1});
// board[i][n-1]='A';
// }
// }
// for(int i=1;i<n-1;i++){
// if(board[0][i]=='O'){
// que.push({0,i});
// board[0][i]='A';
// }
// if(board[m-1][i]=='O'){
// que.push({m-1,i});
// board[m-1][i]='A';
// }
// }
// while(!que.empty()){
// auto tmp=que.front();
// que.pop();
// int x=tmp.first;
// int y=tmp.second;
// for(int k=0;k<4;k++){
// int X=x+xx[k];
// int Y=y+yy[k];
// if(X<0||X>=m||Y<0||Y>=n||board[X][Y]!='O') continue;
// que.push({X,Y});
// board[X][Y]='A';
// }
// }
// 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';
// }
// }
// }
// };
class Solution {
public:
int xx[4]={0,0,1,-1};
int yy[4]={1,-1,0,0};
void dfs(vector<vector<char>>& board,int x,int y){
int m=board.size();
int n=board[0].size();
for(int k=0;k<4;k++){
int X=x+xx[k];
int Y=y+yy[k];
if(X<0||X>=m||Y<0||Y>=n||board[X][Y]!='O') continue;
board[X][Y]='A';
dfs(board,X,Y);
}
}
void solve(vector<vector<char>>& board) {
int m=board.size();
int n=board[0].size();
for(int i=0;i<m;i++){
if(board[i][0]=='O'){
board[i][0]='A';
dfs(board,i,0);
}
if(board[i][n-1]=='O'){
board[i][n-1]='A';
dfs(board,i,n-1);
}
}
for(int i=1;i<n-1;i++){
if(board[0][i]=='O'){
board[0][i]='A';
dfs(board,0,i);
}
if(board[m-1][i]=='O'){
board[m-1][i]='A';
dfs(board,m-1,i);
}
}
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';
}
}
}
};