Surrounded Regions
Q:
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.
A region is captured by flipping all 'O's into 'X's in that surrounded region .
For example,
X X X X X O O X X X O X X O X X
After running your function, the board should be:
X X X X X X X X X X X X X O X X
A: 此题用bfs/dfs都可以解。
首先,从board的四周出发,dfs/bfs遍历,遇到O,作标记,例如'+'---这些O是没有被X包围的O
接着,遍历整个board,遇到O的,这些O是被X包围的O,改成X,遇到特殊标记的,改回O
int m,n;
void solve(vector<vector<char>> &board) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(board.empty()||board[0].empty())
return;
m = board.size();
n = board[0].size();
for(int j=0;j<n;j++){
dfs(0,j,board);
dfs(m-1,j,board);
}
for(int i=1;i<m-1;i++){
dfs(i,0,board);
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]=='+') board[i][j]='O';
}
}
void dfs(int nrow,int ncol,vector<vector<char>>& board)
{
if(nrow>=m||nrow<0||ncol<0||ncol>=n||board[nrow][ncol]!='O')
return;
board[nrow][ncol] = '+';
dfs(nrow+1,ncol,board);
dfs(nrow-1,ncol,board);
dfs(nrow,ncol-1,board);
dfs(nrow,ncol+1,board);
}
浙公网安备 33010602011771号