- 题目描述
给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。
找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。
- 题解
没有被'X'包围的区域一定在边上,可以从四周出发,将没有被包围的区域找到,剩下的就是
被包围的区域。
- 代码
class Solution {
public:
void solve(vector<vector<char>>& board) {
int m=board.size();
if (!m) return ;
int n=board[0].size();
for (int i=0;i<m;i++){
for (int j=0;j<n;j++){
if (board[i][j]=='O'&&(i==0||j==0||i==m-1||j==n-1)){
board[i][j]='A';
dfs(board,i,j,m,n);
}
}
}
for (int i=0;i<m;i++){
for (int j=0;j<n;j++){
if (board[i][j]=='A') board[i][j]='O';
else if (board[i][j]=='O') board[i][j]='X';
}
}
}
int dir[4][2]={0,1,0,-1,-1,0,1,0};
void dfs(vector<vector<char>> &board,int x,int y,int m,int n){
for (int i=0;i<4;i++){
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if (xx>=m||xx<0||yy>=n||yy<0) continue;
if (board[xx][yy]=='O'){
board[xx][yy]='A';
dfs(board,xx,yy,m,n);
}
}
}
};