Small C++ Solution


#1
bool vis[1000][1000];
void dfs(vector<vector<char> > &A , int x , int y)
{
    if(x<0 || x>=A.size() || y<0 || y>=A[0].size() || vis[x][y] || A[x][y]=='X') return;
    vis[x][y] = 1 , A[x][y] = 'D' , dfs(A,x-1,y) , dfs(A,x,y-1) , dfs(A,x+1,y) , dfs(A,x,y+1);
}

void Solution::solve(vector<vector<char>> &A) 
{
    for(int i = 0 ; i < A.size() ; i++) dfs(A,i,0) , dfs(A,i,A[0].size()-1);
    for(int i = 0 ; i < A[0].size() ; i++) dfs(A,0,i) , dfs(A,A.size()-1,i);
    for(int i = 0 ; i < A.size() ; i++) for(int j = 0 ; j < A[0].size() ; j++)
            if(A[i][j]=='O') A[i][j] = 'X', vis[i][j] = 0;
            else if(A[i][j]=='D') A[i][j] = 'O', vis[i][j] = 0;
}