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); }