Surrounded Regions [DFS / BFS / Union-Find]

Graphs [DFS]
Fast Solution in C++

class Solution {
    int row, col;
  
public:
    void solve(vector<vector<char>>& board) {       
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        
        row = board.size();       
        if(row<=1)
            return;
        col = board[0].size();
        if(col<=1)
            return;
        
        
        for(int i=0; i<row; i++) {
            for(int j=0; j<col; j++) {
                if((i==0 || j==0 || i==row-1 || j == col-1) && board[i][j] == 'O') {
                    dfs(i,j,board);
                }
            }
        }
        
        for(int i=0; i<row; i++) {
            for(int j=0; j<col; j++) {
                if(board[i][j]=='O')
                    board[i][j] = 'X';
                if(board[i][j] == 'N')
                    board[i][j] = 'O';
            }
        }
    }
    
    void dfs( int i, int j, vector<vector<char>>& board ) {
        if(board[i][j]=='N')
            return;
        
        board[i][j] = 'N';
        if(i+1 < row && board[i+1][j] == 'O') {
            dfs(i+1, j, board);
        }
        if(i-1 >= 0 && board[i-1][j] == 'O') {
            dfs(i-1, j, board);
        }
        if(j+1 < col && board[i][j+1] == 'O') {
            dfs(i, j+1, board);
        }
        if(j-1 >= 0 && board[i][j-1] == 'O') {
            dfs(i, j-1, board);
        }
    }    
};
Comments (0)