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

  

posted @ 2013-09-22 23:00  summer_zhou  阅读(151)  评论(0编辑  收藏  举报