Surrounded Regions

Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'.
A region is captured by flipping all 'O's into 'X's in that surrounded region.


Example:

X X X X
X O O X
X X O X
X O X X


X X X X
X X X X
X X X X
X O X X


Approach

Java


import java.util.Arrays;

public class SurroundedRegions {
    public static void main(String[] args) {
        char board[][] = { { 'X''X''X''X' }, { 'X''O''O''X' },
                { 'X''X''O''X' }, { 'X''O''X''X' } };
        solve(board);
        System.out.println(Arrays.deepToString(board));
    }

    static boolean isValid(int xint yint nint m) {
        if (x < 0 || x >= n || y < 0 || y >= m)
            return false;
        return true;

    }

    static int dx[] = { -1010 };
    static int dy[] = { 010, -1 };

    static void dfs(char[][] boardint xint ychar prevcchar newc) {
        if (x < 0 || x >= board.length || y < 0 || y >= board[0].length)
            return;
        if (board[x][y] != prevc)
            return;
        board[x][y] = newc;
        for (int i = 0; i < 4; i++) {
            if (isValid(dx[i] + x, dy[i] + y, board.length, board[0].length)) {
                dfs(board, dx[i] + x, dy[i] + y, prevc, newc);
            }
        }
    }

    static void solve(char[][] board) {
        int n = board.length;

        // if empty grid
        if (n == 0)
            return;
        int m = board[0].length;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (board[i][j] == 'O')
                    board[i][j] = '-';
            }
        }
        for (int i = 0; i < n; i++) {
            if (board[i][0] == '-') {

                dfs(board, i, 0'-''O');
            }
        }
        for (int i = 0; i < n; i++) {
            if (board[i][m - 1] == '-') {

                dfs(board, i, m - 1'-''O');
            }
        }
        for (int i = 0; i < m; i++)
            if (board[0][i] == '-')
                dfs(board, 0, i, '-''O');
        for (int i = 0; i < m; i++) {

            if (board[n - 1][i] == '-') {

                dfs(board, n - 1, i, '-''O');
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (board[i][j] == '-') {
                    board[i][j] = 'X';
                }
            }
        }
    }
}

C++

#include <bits/stdc++.h>
using namespace std;


bool isValid(int x,int y,int n,int m)
{
    if(x<0||x>=n||y<0||y>=m)
        return false;
    return true;
    
}

int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
void dfs(vector<vector<char>> &board,int x,int y,char prevc ,char newc)
{
       if(x<0 ||x>=board.size()||y<0||y>=board[0].size()) 
             return;
       if(board[x][y]!=prevc)
             return;
       board[x][y]=newc;
       for(int i=0;i<4;i++)
         {
             if(isValid(dx[i]+x,dy[i]+y,board.size(),board[0].size()))
                {
                    dfs(board,dx[i]+x,dy[i]+y,prevc,newc);
                }
         }
}
void solve(vector<vector<char>>& board
{
    int n=board.size();

    //if empty grid
    if(n==0)
        return ;
    int m=board[0].size();
    for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(board[i][j]=='O')  
                       board[i][j]='-';
            }
        }
      for (int i=0i<ni++)
            {
                if (board[i][0] == '-'
                {
                    
                       dfs(boardi0'-''O'); 
                }
            }
            for (int i=0i<ni++)
            {
                if (board[i][m-1] == '-')
                {
                    
                           dfs(boardim-1'-''O'); 
                }
            }
            for (int i=0i<mi++)
                  if (board[0][i] == '-'
                      dfs(board0i'-''O'); 
             for (int i=0i<mi++)
             {
                 
                       if (board[n-1][i] == '-'
                       {
                           
                          dfs(boardn-1i'-''O');
                       }
             }
                for (int i=0i<ni++) 
                {
                        for (int j=0j<mj++) 
                        {
                                   if (board[i][j] == '-'
                                   {
                                         board[i][j] = 'X'
                                   }
                        }
                }
}
int main()
{
    vector<vector<char>> board={{'X','X','X','X'},
                                {'X','O','O','X'},
                                {'X','X','O','X'},
                                {'X','O','X','X'}};
    solve(board);
    cout<<"[";
    for(int i=0;i<board.size();i++)
      {
          cout<<"[";
          for(int j=0;j<board[i].size();j++)
            {
                cout<<board[i][j];
                if(j!=board[i].size()-1
                  cout<<",";
            }
            if(i!=board.size()-1)
              cout<<"],\n";
            else
            cout<<"]";
            
      }
      cout<<"]";
}


No comments:

Post a Comment