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 XX O O XX X O XX O X X
After running your function, the board should be:
X X X XX X X XX X X XX 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> &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 >& 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); }