Surrounded Regions

Here given code implementation process.

/*
   C Program for
   Surrounded Regions
*/
#include <stdio.h>
#define R 8 
#define C 7

// Print record elements
void printResult(char record[R][C])
{
    for (int i = 0; i < R; ++i)
    {
        for (int j = 0; j < C; ++j)
        {
            
            printf(" %c",record[i][j]);
            
        }
        printf("\n");
    }  
}
// Fill corner elements with a "O" value
void fill(char record[R][C],int i, int j)
{
   if(i < 0 || i >= R || j < 0 || j >= C)
   {
        return;
   }

   if(record[i][j] == '+')
   {
        // Update element
        record[i][j] = 'O';

        // visit to down element
        fill(record,i+1,j);
        // visit to up element
        fill(record,i-1,j);

        // visit to right element
        fill(record,i,j+1);
        // visit to left element
        fill(record,i,j-1);   
   }
}

// Fill surrounded regions
void solve(char record[R][C])
{
    // loop controlling variables
    int i = 0;
    int j = 0;
    printf("\n Before Surrounded \n");
    printResult(record);
    // First change the all zero with other symbol  "+"
    for ( i = 0; i < R; ++i)
    {
        for ( j = 0; j < C; ++j)
        {
            if(record[i][j]=='O')
            {
                record[i][j] = '+';
            }
        }
    } 
    // Change boundary 
    // Check first and last column
    for ( i = 0; i < R; ++i)
    {
        if(record[i][0] == '+')
        {
            fill(record,i,0);
        }

        if(record[i][C-1]=='+')
        {
            fill(record,i,C-1);
        }
    }

    // Check first and last row
    for ( i = 0; i < C; ++i)
    {
        if(record[0][i] == '+')
        {
            fill(record,0,i);
        }

        if(record[R-1][i]=='+')
        {
            fill(record,R-1,i);
        }
    }
    for ( i = 0; i < R; ++i)
    {
        for ( j = 0; j < C; ++j)
        {
            if(record[i][j]=='+')
            {
                record[i][j] = 'X';
            }
        }
    } 
    printf("\n After Surrounded \n");
    printResult(record);
}

int main()
{
    char record[R][C] =  
    {
        {'O', 'X', 'X', 'X', 'X', 'O', 'X'},
        {'X', 'X', 'X', 'X', 'O', 'X', 'O'},
        {'O', 'O', 'O', 'X', 'X', 'O', 'O'},
        {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
        {'X', 'X', 'O', 'X', 'X', 'X', 'X'},
        {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
        {'X', 'X', 'O', 'O', 'X', 'O', 'O'},
        {'X', 'X', 'O', 'X', 'O', 'X', 'O'},
    };
    /*
        Change all O with X when O is Surrounded by X
        Example
        ========
        // Left,Right, Bottom and Top are have X
            X   X
        X   O   O  X
            X   X
        
        Then change center O with X

            X   X
        X   X   X  X
            X   X
        -----------------------------
        or
            X
        X   O  X
            X   
        Then change center O with X
            X
        X   O  X
            X    
    */
    solve(record);

    return 0;
}

Output

 Before Surrounded
 O X X X X O X
 X X X X O X O
 O O O X X O O
 X O X X X X X
 X X O X X X X
 X O X X X X X
 X X O O X O O
 X X O X O X O

 After Surrounded
 O X X X X O X
 X X X X X X O
 O O O X X O O
 X O X X X X X
 X X X X X X X
 X X X X X X X
 X X O O X O O
 X X O X O X O
/*
   Java Program for
   surrounded regions
*/
public class Regions
{
    // Print record elements
    public void printresult(char[][] record, int r, int c)
    {
        for (int i = 0; i < r; ++i)
        {
            for (int j = 0; j < c; ++j)
            {
                System.out.print("  " + record[i][j]);
            }
            System.out.print("\n");
        }
    }
    // Fill corner elements with a "O" value
    public void fill(char[][] record, int i, int j, int r, int c)
    {
        if (i < 0 || i >= r || j < 0 || j >= c)
        {
            return;
        }
        if (record[i][j] == '+')
        {
            // Update element
            record[i][j] = 'O';
            // visit to down element
            fill(record, i + 1, j, r, c);
            // visit to up element
            fill(record, i - 1, j, r, c);
            // visit to right element
            fill(record, i, j + 1, r, c);
            // visit to left element
            fill(record, i, j - 1, r, c);
        }
    }
    // Fill surrounded regions
    public void solve(char[][] record)
    {
        // loop controlling variables
        int i = 0;
        int j = 0;
        int r = record.length;
        int c = record[0].length;
        System.out.print("\n Before Surrounded \n");
        printresult(record, r, c);
        // First change the all zero with other symbol  "+"
        for (i = 0; i < r; ++i)
        {
            for (j = 0; j < c; ++j)
            {
                if (record[i][j] == 'O')
                {
                    record[i][j] = '+';
                }
            }
        }
        // change boundary 
        // check first and last column
        for (i = 0; i < r; ++i)
        {
            if (record[i][0] == '+')
            {
                fill(record, i, 0, r, c);
            }
            if (record[i][c - 1] == '+')
            {
                fill(record, i, c - 1, r, c);
            }
        }
        // check first and last row
        for (i = 0; i < c; ++i)
        {
            if (record[0][i] == '+')
            {
                fill(record, 0, i, r, c);
            }
            if (record[r - 1][i] == '+')
            {
                fill(record, r - 1, i, r, c);
            }
        }
        for (i = 0; i < r; ++i)
        {
            for (j = 0; j < c; ++j)
            {
                if (record[i][j] == '+')
                {
                    record[i][j] = 'X';
                }
            }
        }
        System.out.print("\n After Surrounded \n");
        printresult(record, r, c);
    }
    public static void main(String[] args)
    {
        Regions task = new Regions();
        char [][]record =  
        {
            {'O', 'X', 'X', 'X', 'X', 'O', 'X'},
            {'X', 'X', 'X', 'X', 'O', 'X', 'O'},
            {'O', 'O', 'O', 'X', 'X', 'O', 'O'},
            {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
            {'X', 'X', 'O', 'X', 'X', 'X', 'X'},
            {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
            {'X', 'X', 'O', 'O', 'X', 'O', 'O'},
            {'X', 'X', 'O', 'X', 'O', 'X', 'O'},
        };
        /*
            Change all O with X when O is Surrounded by X
            Example
            ========
            // Left,right, Bottom and Top are have X
                X   X
            X   O   O  X
                X   X
            
            Then change center O with X

                X   X
            X   X   X  X
                X   X
            -----------------------------
            or
                X
            X   O  X
                X   
            Then change center O with X
                X
            X   O  X
                X    
        */
        task.solve(record);
    }
}

Output

 Before Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

 After Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O
// Include header file
#include <iostream>
#define R 8 
#define C 7
using namespace std;
/*
   C++ Program for
   surrounded regions
*/
class Regions
{
    public:
        // Print record elements
        void printresult(char record[R][C])
        {
            for (int i = 0; i < R; ++i)
            {
                for (int j = 0; j < C; ++j)
                {
                    cout << "  " << record[i][j];
                }
                cout << "\n";
            }
        }
    // Fill corner elements with a "O" value
    void fill(char record[R][C], int i, int j)
    {
        if (i < 0 || i >= R || j < 0 || j >= C)
        {
            return;
        }
        if (record[i][j] == '+')
        {
            // Update element
            record[i][j] = 'O';
            // visit to down element
            this->fill(record, i + 1, j);
            // visit to up element
            this->fill(record, i - 1, j);
            // visit to right element
            this->fill(record, i, j + 1);
            // visit to left element
            this->fill(record, i, j - 1);
        }
    }
    // Fill surrounded regions
    void solve(char record[R][C])
    {
        // loop controlling variables
        int i = 0;
        int j = 0;
  
        cout << "\n  Before Surrounded \n";
        this->printresult(record);
        // First change the all zero with other symbol  "+"
        for (i = 0; i < R; ++i)
        {
            for (j = 0; j < C; ++j)
            {
                if (record[i][j] == 'O')
                {
                    record[i][j] = '+';
                }
            }
        }
        // change boundary
        // check first and last column
        for (i = 0; i < R; ++i)
        {
            if (record[i][0] == '+')
            {
                this->fill(record, i, 0);
            }
            if (record[i][C - 1] == '+')
            {
                this->fill(record, i, C - 1);
            }
        }
        // check first and last row
        for (i = 0; i < C; ++i)
        {
            if (record[0][i] == '+')
            {
                this->fill(record, 0, i);
            }
            if (record[R - 1][i] == '+')
            {
                this->fill(record, R - 1, i);
            }
        }
        for (i = 0; i < R; ++i)
        {
            for (j = 0; j < C; ++j)
            {
                if (record[i][j] == '+')
                {
                    record[i][j] = 'X';
                }
            }
        }
        cout << "\n  After Surrounded \n";
        this->printresult(record);
    }
};
int main()
{
    Regions task = Regions();
    char record[R][C] =  
    {
        {'O', 'X', 'X', 'X', 'X', 'O', 'X'},
        {'X', 'X', 'X', 'X', 'O', 'X', 'O'},
        {'O', 'O', 'O', 'X', 'X', 'O', 'O'},
        {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
        {'X', 'X', 'O', 'X', 'X', 'X', 'X'},
        {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
        {'X', 'X', 'O', 'O', 'X', 'O', 'O'},
        {'X', 'X', 'O', 'X', 'O', 'X', 'O'},
    };
    /*
        Change all O with X when O is Surrounded by X
        Example
        ========
        // Left,right, Bottom and Top are have X
            X   X
        X   O   O  X
            X   X
        
        Then change center O with X
            X   X
        X   X   X  X
            X   X
        -----------------------------
        or
            X
        X   O  X
            X   
        Then change center O with X
            X
        X   O  X
            X    
    */
    task.solve(record);
    return 0;
}

Output

  Before Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

  After Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O
// Include namespace system
using System;
/*
   C# Program for
   surrounded regions
*/
public class Regions
{
    // Print record elements
    public void printresult(char[,] record, int r, int c)
    {
        for (int i = 0; i < r; ++i)
        {
            for (int j = 0; j < c; ++j)
            {
                Console.Write("  " + record[i,j]);
            }
            Console.Write("\n");
        }
    }
    // Fill corner elements with a "O" value
    public void fill(char[,] record, int i, int j, int r, int c)
    {
        if (i < 0 || i >= r || j < 0 || j >= c)
        {
            return;
        }
        if (record[i,j] == '+')
        {
            // Update element
            record[i,j] = 'O';
            // visit to down element
            fill(record, i + 1, j, r, c);
            // visit to up element
            fill(record, i - 1, j, r, c);
            // visit to right element
            fill(record, i, j + 1, r, c);
            // visit to left element
            fill(record, i, j - 1, r, c);
        }
    }
    // Fill surrounded regions
    public void solve(char[,] record)
    {
        // loop controlling variables
        int i = 0;
        int j = 0;
        int r = record.GetLength(0);
        int c = record.GetLength(1);
        Console.Write("\n  Before Surrounded \n");
        printresult(record, r, c);
        // First change the all zero with other symbol  "+"
        for (i = 0; i < r; ++i)
        {
            for (j = 0; j < c; ++j)
            {
                if (record[i,j] == 'O')
                {
                    record[i,j] = '+';
                }
            }
        }
        // change boundary
        // check first and last column
        for (i = 0; i < r; ++i)
        {
            if (record[i,0] == '+')
            {
                fill(record, i, 0, r, c);
            }
            if (record[i,c - 1] == '+')
            {
                fill(record, i, c - 1, r, c);
            }
        }
        // check first and last row
        for (i = 0; i < c; ++i)
        {
            if (record[0,i] == '+')
            {
                fill(record, 0, i, r, c);
            }
            if (record[r - 1,i] == '+')
            {
                fill(record, r - 1, i, r, c);
            }
        }
        for (i = 0; i < r; ++i)
        {
            for (j = 0; j < c; ++j)
            {
                if (record[i,j] == '+')
                {
                    record[i,j] = 'X';
                }
            }
        }
        Console.Write("\n  After Surrounded \n");
        printresult(record, r, c);
    }
    public static void Main(String[] args)
    {
        Regions task = new Regions();
        char[,] record = 
        {
            {'O', 'X', 'X', 'X', 'X', 'O', 'X'},
            {'X', 'X', 'X', 'X', 'O', 'X', 'O'},
            {'O', 'O', 'O', 'X', 'X', 'O', 'O'},
            {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
            {'X', 'X', 'O', 'X', 'X', 'X', 'X'},
            {'X', 'O', 'X', 'X', 'X', 'X', 'X'},
            {'X', 'X', 'O', 'O', 'X', 'O', 'O'},
            {'X', 'X', 'O', 'X', 'O', 'X', 'O'}
        };
        /*
            Change all O with X when O is Surrounded by X
            Example
            ========
            // Left,right, Bottom and Top are have X
                X   X
            X   O   O  X
                X   X
            
            Then change center O with X
                X   X
            X   X   X  X
                X   X
            -----------------------------
            or
                X
            X   O  X
                X   
            Then change center O with X
                X
            X   O  X
                X    
        */
        task.solve(record);
    }
}

Output

  Before Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

  After Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O
<?php
/*
   Php Program for
   surrounded regions
*/
class Regions
{
    // Print record elements
    public  function printresult( & $record, $r, $c)
    {
        for ($i = 0; $i < $r; ++$i)
        {
            for ($j = 0; $j < $c; ++$j)
            {
                echo "  ". $record[$i][$j];
            }
            echo "\n";
        }
    }
    // Fill corner elements with a "O" value
    public  function fill( & $record, $i, $j, $r, $c)
    {
        if ($i < 0 || $i >= $r || $j < 0 || $j >= $c)
        {
            return;
        }
        if ($record[$i][$j] == '+')
        {
            // Update element
            $record[$i][$j] = 'O';
            // visit to down element
            $this->fill($record, $i + 1, $j, $r, $c);
            // visit to up element
            $this->fill($record, $i - 1, $j, $r, $c);
            // visit to right element
            $this->fill($record, $i, $j + 1, $r, $c);
            // visit to left element
            $this->fill($record, $i, $j - 1, $r, $c);
        }
    }
    // Fill surrounded regions
    public  function solve( & $record)
    {
        // loop controlling variables
        $i = 0;
        $j = 0;
        $r = count($record);
        $c = count($record[0]);
        echo "\n  Before Surrounded \n";
        $this->printresult($record, $r, $c);
        // First change the all zero with other symbol  "+"
        for ($i = 0; $i < $r; ++$i)
        {
            for ($j = 0; $j < $c; ++$j)
            {
                if ($record[$i][$j] == 'O')
                {
                    $record[$i][$j] = '+';
                }
            }
        }
        // change boundary
        // check first and last column
        for ($i = 0; $i < $r; ++$i)
        {
            if ($record[$i][0] == '+')
            {
                $this->fill($record, $i, 0, $r, $c);
            }
            if ($record[$i][$c - 1] == '+')
            {
                $this->fill($record, $i, $c - 1, $r, $c);
            }
        }
        // check first and last row
        for ($i = 0; $i < $c; ++$i)
        {
            if ($record[0][$i] == '+')
            {
                $this->fill($record, 0, $i, $r, $c);
            }
            if ($record[$r - 1][$i] == '+')
            {
                $this->fill($record, $r - 1, $i, $r, $c);
            }
        }
        for ($i = 0; $i < $r; ++$i)
        {
            for ($j = 0; $j < $c; ++$j)
            {
                if ($record[$i][$j] == '+')
                {
                    $record[$i][$j] = 'X';
                }
            }
        }
        echo "\n  After Surrounded \n";
        $this->printresult($record, $r, $c);
    }
}

function main()
{
    $task = new Regions();
    $record = array(
      array('O', 'X', 'X', 'X', 'X', 'O', 'X'), 
      array('X', 'X', 'X', 'X', 'O', 'X', 'O'), 
      array('O', 'O', 'O', 'X', 'X', 'O', 'O'), 
      array('X', 'O', 'X', 'X', 'X', 'X', 'X'), 
      array('X', 'X', 'O', 'X', 'X', 'X', 'X'), 
      array('X', 'O', 'X', 'X', 'X', 'X', 'X'), 
      array('X', 'X', 'O', 'O', 'X', 'O', 'O'), 
      array('X', 'X', 'O', 'X', 'O', 'X', 'O')
    );
    /*
        Change all O with X when O is Surrounded by X
        Example
        ========
        // Left,right, Bottom and Top are have X
            X   X
        X   O   O  X
            X   X
        
        Then change center O with X
            X   X
        X   X   X  X
            X   X
        -----------------------------
        or
            X
        X   O  X
            X   
        Then change center O with X
            X
        X   O  X
            X    
    */
    $task->solve($record);
}
main();

Output

  Before Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

  After Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O
/*
   Node Js Program for
   surrounded regions
*/
class Regions
{
    // Print record elements
    printresult(record, r, c)
    {
        for (var i = 0; i < r; ++i)
        {
            for (var j = 0; j < c; ++j)
            {
                process.stdout.write("  " + record[i][j]);
            }
            process.stdout.write("\n");
        }
    }
    // Fill corner elements with a "O" value
    fill(record, i, j, r, c)
    {
        if (i < 0 || i >= r || j < 0 || j >= c)
        {
            return;
        }
        if (record[i][j] == '+')
        {
            // Update element
            record[i][j] = 'O';
            // visit to down element
            this.fill(record, i + 1, j, r, c);
            // visit to up element
            this.fill(record, i - 1, j, r, c);
            // visit to right element
            this.fill(record, i, j + 1, r, c);
            // visit to left element
            this.fill(record, i, j - 1, r, c);
        }
    }
    // Fill surrounded regions
    solve(record)
    {
        // loop controlling variables
        var i = 0;
        var j = 0;
        var r = record.length;
        var c = record[0].length;
        process.stdout.write("\n  Before Surrounded \n");
        this.printresult(record, r, c);
        // First change the all zero with other symbol  "+"
        for (i = 0; i < r; ++i)
        {
            for (j = 0; j < c; ++j)
            {
                if (record[i][j] == 'O')
                {
                    record[i][j] = '+';
                }
            }
        }
        // change boundary
        // check first and last column
        for (i = 0; i < r; ++i)
        {
            if (record[i][0] == '+')
            {
                this.fill(record, i, 0, r, c);
            }
            if (record[i][c - 1] == '+')
            {
                this.fill(record, i, c - 1, r, c);
            }
        }
        // check first and last row
        for (i = 0; i < c; ++i)
        {
            if (record[0][i] == '+')
            {
                this.fill(record, 0, i, r, c);
            }
            if (record[r - 1][i] == '+')
            {
                this.fill(record, r - 1, i, r, c);
            }
        }
        for (i = 0; i < r; ++i)
        {
            for (j = 0; j < c; ++j)
            {
                if (record[i][j] == '+')
                {
                    record[i][j] = 'X';
                }
            }
        }
        process.stdout.write("\n  After Surrounded \n");
        this.printresult(record, r, c);
    }
}

function main()
{
    var task = new Regions();
    var record = [
      ['O', 'X', 'X', 'X', 'X', 'O', 'X'] , 
      ['X', 'X', 'X', 'X', 'O', 'X', 'O'] , 
      ['O', 'O', 'O', 'X', 'X', 'O', 'O'] , 
      ['X', 'O', 'X', 'X', 'X', 'X', 'X'] , 
      ['X', 'X', 'O', 'X', 'X', 'X', 'X'] , 
      ['X', 'O', 'X', 'X', 'X', 'X', 'X'] , 
      ['X', 'X', 'O', 'O', 'X', 'O', 'O'] , 
      ['X', 'X', 'O', 'X', 'O', 'X', 'O']
    ];
    /*
        Change all O with X when O is Surrounded by X
        Example
        ========
        // Left,right, Bottom and Top are have X
            X   X
        X   O   O  X
            X   X
        
        Then change center O with X
            X   X
        X   X   X  X
            X   X
        -----------------------------
        or
            X
        X   O  X
            X   
        Then change center O with X
            X
        X   O  X
            X    
    */
    task.solve(record);
}
main();

Output

  Before Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

  After Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O
#    Python 3 Program for
#    surrounded regions

class Regions :
    #  Print record elements
    def printresult(self, record, r, c) :
        i = 0
        j = 0
        while (i < r) :
            while (j < c) :
                print("  ", record[i][j], end = "")
                j += 1
            
            print(end = "\n")
            i += 1
            j = 0
        
    
    #  Fill corner elements with a "O" value
    def fill(self, record, i, j, r, c) :
        if (i < 0 or i >= r or j < 0 or j >= c) :
            return
        
        if (record[i][j] == '+') :
            #  Update element
            record[i][j] = 'O'
            #  visit to down element
            self.fill(record, i + 1, j, r, c)
            #  visit to up element
            self.fill(record, i - 1, j, r, c)
            #  visit to right element
            self.fill(record, i, j + 1, r, c)
            #  visit to left element
            self.fill(record, i, j - 1, r, c)
        
    
    #  Fill surrounded regions
    def solve(self, record) :
        #  loop controlling variables
        i = 0
        j = 0
        r = len(record)
        c = len(record[0])
        print("\n  Before Surrounded ")
        self.printresult(record, r, c)
        #  First change the all zero with other symbol  "+"
        while (i < r) :
            while (j < c) :
                if (record[i][j] == 'O') :
                    record[i][j] = '+'
                
                j += 1
            
            i += 1
            j = 0
        
        #  change boundary
        #  check first and last column
        i = 0
        while (i < r) :
            if (record[i][0] == '+') :
                self.fill(record, i, 0, r, c)
            
            if (record[i][c - 1] == '+') :
                self.fill(record, i, c - 1, r, c)
            
            i += 1
        
        #  check first and last row
        i = 0
        while (i < c) :
            if (record[0][i] == '+') :
                self.fill(record, 0, i, r, c)
            
            if (record[r - 1][i] == '+') :
                self.fill(record, r - 1, i, r, c)
            
            i += 1
        
        i = 0
        while (i < r) :
            j = 0
            while (j < c) :
                if (record[i][j] == '+') :
                    record[i][j] = 'X'
                
                j += 1
            
            i += 1
        
        print("\n  After Surrounded ")
        self.printresult(record, r, c)
    

def main() :
    task = Regions()
    record = [
      ['O', 'X', 'X', 'X', 'X', 'O', 'X'] , 
      ['X', 'X', 'X', 'X', 'O', 'X', 'O'] , 
      ['O', 'O', 'O', 'X', 'X', 'O', 'O'] , 
      ['X', 'O', 'X', 'X', 'X', 'X', 'X'] , 
      ['X', 'X', 'O', 'X', 'X', 'X', 'X'] , 
      ['X', 'O', 'X', 'X', 'X', 'X', 'X'] , 
      ['X', 'X', 'O', 'O', 'X', 'O', 'O'] , 
      ['X', 'X', 'O', 'X', 'O', 'X', 'O']
    ]
    # 
    #     Change all O with X when O is Surrounded by X
    #     Example
    #     ========
    #     // Left,right, Bottom and Top are have X
    #         X   X
    #     X   O   O  X
    #         X   X
    #     
    #     Then change center O with X
    #         X   X
    #     X   X   X  X
    #         X   X
    #     -----------------------------
    #     or
    #         X
    #     X   O  X
    #         X   
    #     Then change center O with X
    #         X
    #     X   O  X
    #         X    
    
    task.solve(record)

if __name__ == "__main__": main()

Output

  Before Surrounded
   O   X   X   X   X   O   X
   X   X   X   X   O   X   O
   O   O   O   X   X   O   O
   X   O   X   X   X   X   X
   X   X   O   X   X   X   X
   X   O   X   X   X   X   X
   X   X   O   O   X   O   O
   X   X   O   X   O   X   O

  After Surrounded
   O   X   X   X   X   O   X
   X   X   X   X   X   X   O
   O   O   O   X   X   O   O
   X   O   X   X   X   X   X
   X   X   X   X   X   X   X
   X   X   X   X   X   X   X
   X   X   O   O   X   O   O
   X   X   O   X   O   X   O
#    Ruby Program for
#    surrounded regions

class Regions 
    #  Print record elements
    def printresult(record, r, c) 
        i = 0
        j = 0
        while (i < r) 
            while (j < c) 
                print("  ", record[i][j])
                j += 1
            end

            print("\n")
            i += 1
            j = 0
        end

    end

    #  Fill corner elements with a "O" value
    def fill(record, i, j, r, c) 
        if (i < 0 || i >= r || j < 0 || j >= c) 
            return
        end

        if (record[i][j] == '+') 
            #  Update element
            record[i][j] = 'O'
            #  visit to down element
            self.fill(record, i + 1, j, r, c)
            #  visit to up element
            self.fill(record, i - 1, j, r, c)
            #  visit to right element
            self.fill(record, i, j + 1, r, c)
            #  visit to left element
            self.fill(record, i, j - 1, r, c)
        end

    end

    #  Fill surrounded regions
    def solve(record) 
        #  loop controlling variables
        i = 0
        j = 0
        r = record.length
        c = record[0].length
        print("\n  Before Surrounded \n")
        self.printresult(record, r, c)
        #  First change the all zero with other symbol  "+"
        while (i < r) 
            while (j < c) 
                if (record[i][j] == 'O') 
                    record[i][j] = '+'
                end

                j += 1
            end

            i += 1
            j = 0
        end

        #  change boundary
        #  check first and last column
        i = 0
        while (i < r) 
            if (record[i][0] == '+') 
                self.fill(record, i, 0, r, c)
            end

            if (record[i][c - 1] == '+') 
                self.fill(record, i, c - 1, r, c)
            end

            i += 1
        end

        #  check first and last row
        i = 0
        while (i < c) 
            if (record[0][i] == '+') 
                self.fill(record, 0, i, r, c)
            end

            if (record[r - 1][i] == '+') 
                self.fill(record, r - 1, i, r, c)
            end

            i += 1
        end

        i = 0
        while (i < r) 
            j = 0
            while (j < c) 
                if (record[i][j] == '+') 
                    record[i][j] = 'X'
                end

                j += 1
            end

            i += 1
        end

        print("\n  After Surrounded \n")
        self.printresult(record, r, c)
    end

end

def main() 
    task = Regions.new()
    record = [
      ['O', 'X', 'X', 'X', 'X', 'O', 'X'] , 
      ['X', 'X', 'X', 'X', 'O', 'X', 'O'] , 
      ['O', 'O', 'O', 'X', 'X', 'O', 'O'] , 
      ['X', 'O', 'X', 'X', 'X', 'X', 'X'] , 
      ['X', 'X', 'O', 'X', 'X', 'X', 'X'] , 
      ['X', 'O', 'X', 'X', 'X', 'X', 'X'] , 
      ['X', 'X', 'O', 'O', 'X', 'O', 'O'] , 
      ['X', 'X', 'O', 'X', 'O', 'X', 'O']
    ]
    # 
    #     Change all O with X when O is Surrounded by X
    #     Example
    #     ========
    #     // Left,right, Bottom and Top are have X
    #         X   X
    #     X   O   O  X
    #         X   X
    #     
    #     Then change center O with X
    #         X   X
    #     X   X   X  X
    #         X   X
    #     -----------------------------
    #     or
    #         X
    #     X   O  X
    #         X   
    #     Then change center O with X
    #         X
    #     X   O  X
    #         X    
    
    task.solve(record)
end

main()

Output

  Before Surrounded 
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

  After Surrounded 
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O
/*
   Scala Program for
   surrounded regions
*/
class Regions
{
    // Print record elements
    def printresult(record: Array[Array[Character]], r: Int, c: Int): Unit = {
        var i: Int = 0;
        var j: Int = 0;
        while (i < r)
        {
            while (j < c)
            {
                print("  " + record(i)(j));
                j += 1;
            }
            print("\n");
            i += 1;
            j = 0;
        }
    }
    // Fill corner elements with a "O" value
    def fill(record: Array[Array[Character]], i: Int, j: Int, r: Int, c: Int): Unit = {
        if (i < 0 || i >= r || j < 0 || j >= c)
        {
            return;
        }
        if (record(i)(j) == '+')
        {
            // Update element
            record(i)(j) = 'O';
            // visit to down element
            this.fill(record, i + 1, j, r, c);
            // visit to up element
            this.fill(record, i - 1, j, r, c);
            // visit to right element
            this.fill(record, i, j + 1, r, c);
            // visit to left element
            this.fill(record, i, j - 1, r, c);
        }
    }
    // Fill surrounded regions
    def solve(record: Array[Array[Character]]): Unit = {
        // loop controlling variables
        var i: Int = 0;
        var j: Int = 0;
        var r: Int = record.length;
        var c: Int = record(0).length;
        print("\n  Before Surrounded \n");
        this.printresult(record, r, c);
        // First change the all zero with other symbol  "+"
        while (i < r)
        {
            while (j < c)
            {
                if (record(i)(j) == 'O')
                {
                    record(i)(j) = '+';
                }
                j += 1;
            }
            i += 1;
            j = 0;
        }
        // change boundary
        // check first and last column
        i = 0;
        while (i < r)
        {
            if (record(i)(0) == '+')
            {
                this.fill(record, i, 0, r, c);
            }
            if (record(i)(c - 1) == '+')
            {
                this.fill(record, i, c - 1, r, c);
            }
            i += 1;
        }
        // check first and last row
        i = 0;
        while (i < c)
        {
            if (record(0)(i) == '+')
            {
                this.fill(record, 0, i, r, c);
            }
            if (record(r - 1)(i) == '+')
            {
                this.fill(record, r - 1, i, r, c);
            }
            i += 1;
        }
        i = 0;
        while (i < r)
        {
            j = 0;
            while (j < c)
            {
                if (record(i)(j) == '+')
                {
                    record(i)(j) = 'X';
                }
                j += 1;
            }
            i += 1;
        }
        print("\n  After Surrounded \n");
        this.printresult(record, r, c);
    }
}
object Main
{
    def main(args: Array[String]): Unit = {
        var task: Regions = new Regions();
        var record: Array[Array[Character]] = Array(
          Array('O', 'X', 'X', 'X', 'X', 'O', 'X'), 
          Array('X', 'X', 'X', 'X', 'O', 'X', 'O'), 
          Array('O', 'O', 'O', 'X', 'X', 'O', 'O'), 
          Array('X', 'O', 'X', 'X', 'X', 'X', 'X'), 
          Array('X', 'X', 'O', 'X', 'X', 'X', 'X'), 
          Array('X', 'O', 'X', 'x', 'X', 'X', 'X'), 
          Array('X', 'X', 'O', 'O', 'X', 'O', 'O'), 
          Array('X', 'X', 'O', 'X', 'O', 'X', 'O')
        );
        /*
            Change all O with X when O is Surrounded by X
            Example
            ========
            // Left,right, Bottom and Top are have X
                X   X
            X   O   O  X
                X   X
            
            Then change center O with X
                X   X
            X   X   X  X
                X   X
            -----------------------------
            or
                X
            X   O  X
                X   
            Then change center O with X
                X
            X   O  X
                X    
        */
        task.solve(record);
    }
}

Output

  Before Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

  After Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O
/*
   Swift 4 Program for
   surrounded regions
*/
class Regions
{
    // Print record elements
    func printresult(_ record: [
        [Character]
    ], _ r: Int, _ c: Int)
    {
        var i: Int = 0;
        var j: Int = 0;
        while (i < r)
        {
            while (j < c)
            {
                print("  ", record[i][j], terminator: "");
                j += 1;
            }
            print(terminator: "\n");
            i += 1;
            j = 0;
        }
    }
    // Fill corner elements with a "O" value
    func fill(_ record: inout[[Character]], _ i: Int, _ j: Int, _ r: Int, _ c: Int)
    {
        if (i < 0 || i >= r || j < 0 || j >= c)
        {
            return;
        }
        if (record[i][j] == "+")
        {
            // Update element
            record[i][j] = "O";
            // visit to down element
            self.fill(&record, i + 1, j, r, c);
            // visit to up element
            self.fill(&record, i - 1, j, r, c);
            // visit to right element
            self.fill(&record, i, j + 1, r, c);
            // visit to left element
            self.fill(&record, i, j - 1, r, c);
        }
    }
    // Fill surrounded regions
    func solve(_ record: inout[[Character]])
    {
        // loop controlling variables
        var i: Int = 0;
        var j: Int = 0;
        let r: Int = record.count;
        let c: Int = record[0].count;
        print("\n  Before Surrounded ");
        self.printresult(record, r, c);
        // First change the all zero with other symbol  "+"
        while (i < r)
        {
            while (j < c)
            {
                if (record[i][j] == "O")
                {
                    record[i][j] = "+";
                }
                j += 1;
            }
            i += 1;
            j = 0;
        }
        // change boundary
        // check first and last column
        i = 0;
        while (i < r)
        {
            if (record[i][0] == "+")
            {
                self.fill(&record, i, 0, r, c);
            }
            if (record[i][c - 1] == "+")
            {
                self.fill(&record, i, c - 1, r, c);
            }
            i += 1;
        }
        // check first and last row
        i = 0;
        while (i < c)
        {
            if (record[0][i] == "+")
            {
                self.fill(&record, 0, i, r, c);
            }
            if (record[r - 1][i] == "+")
            {
                self.fill(&record, r - 1, i, r, c);
            }
            i += 1;
        }
        i = 0;
        while (i < r)
        {
            j = 0;
            while (j < c)
            {
                if (record[i][j] == "+")
                {
                    record[i][j] = "X";
                }
                j += 1;
            }
            i += 1;
        }
        print("\n  After Surrounded ");
        self.printresult(record, r, c);
    }
}
func main()
{
    let task: Regions = Regions();
    var record: [[Character]] = [
      ["O", "X", "X", "X", "X", "O", "X"] , 
      ["X", "X", "X", "X", "O", "X", "O"] , 
      ["O", "O", "O", "X", "X", "O", "O"] , 
      ["X", "O", "X", "X", "X", "X", "X"] , 
      ["X", "X", "O", "X", "X", "X", "X"] , 
      ["X", "O", "X", "X", "X", "X", "X"] , 
      ["X", "X", "O", "O", "X", "O", "O"] , 
      ["X", "X", "O", "X", "O", "X", "O"]
    ];
    /*
        Change all O with X when O is Surrounded by X
        Example
        ========
        // Left,right, Bottom and Top are have X
            X   X
        X   O   O  X
            X   X
        
        Then change center O with X
            X   X
        X   X   X  X
            X   X
        -----------------------------
        or
            X
        X   O  X
            X   
        Then change center O with X
            X
        X   O  X
            X    
    */
    task.solve(&record);
}
main();

Output

  Before Surrounded
   O   X   X   X   X   O   X
   X   X   X   X   O   X   O
   O   O   O   X   X   O   O
   X   O   X   X   X   X   X
   X   X   O   X   X   X   X
   X   O   X   X   X   X   X
   X   X   O   O   X   O   O
   X   X   O   X   O   X   O

  After Surrounded
   O   X   X   X   X   O   X
   X   X   X   X   X   X   O
   O   O   O   X   X   O   O
   X   O   X   X   X   X   X
   X   X   X   X   X   X   X
   X   X   X   X   X   X   X
   X   X   O   O   X   O   O
   X   X   O   X   O   X   O
/*
   Kotlin Program for
   surrounded regions
*/
class Regions
{
    // Print record elements
    fun printresult(record: Array <Array<Char>> , r: Int, c: Int): Unit
    {
        var i: Int = 0;
        var j: Int = 0;
        while (i < r)
        {
            while (j < c)
            {
                print("  " + record[i][j]);
                j += 1;
            }
            print("\n");
            i += 1;
            j = 0;
        }
    }
    // Fill corner elements with a "O" value
    fun fill(record: Array <Array<Char>> , i: Int, j: Int, r: Int, c: Int): Unit
    {
        if (i < 0 || i >= r || j < 0 || j >= c)
        {
            return;
        }
        if (record[i][j] == '+')
        {
            // Update element
            record[i][j] = 'O';
            // visit to down element
            this.fill(record, i + 1, j, r, c);
            // visit to up element
            this.fill(record, i - 1, j, r, c);
            // visit to right element
            this.fill(record, i, j + 1, r, c);
            // visit to left element
            this.fill(record, i, j - 1, r, c);
        }
    }
    // Fill surrounded regions
    fun solve(record: Array < Array < Char >> ): Unit
    {
        // loop controlling variables
        var i: Int = 0;
        var j: Int = 0;
        var r: Int = record.count();
        var c: Int = record[0].count();
        print("\n  Before Surrounded \n");
        this.printresult(record, r, c);
        // First change the all zero with other symbol  "+"
        while (i < r)
        {
            while (j < c)
            {
                if (record[i][j] == 'O')
                {
                    record[i][j] = '+';
                }
                j += 1;
            }
            i += 1;
            j = 0;
        }
        // change boundary
        // check first and last column
        i = 0;
        while (i < r)
        {
            if (record[i][0] == '+')
            {
                this.fill(record, i, 0, r, c);
            }
            if (record[i][c - 1] == '+')
            {
                this.fill(record, i, c - 1, r, c);
            }
            i += 1;
        }
        // check first and last row
        i = 0;
        while (i < c)
        {
            if (record[0][i] == '+')
            {
                this.fill(record, 0, i, r, c);
            }
            if (record[r - 1][i] == '+')
            {
                this.fill(record, r - 1, i, r, c);
            }
            i += 1;
        }
        i = 0;
        while (i < r)
        {
            j = 0;
            while (j < c)
            {
                if (record[i][j] == '+')
                {
                    record[i][j] = 'X';
                }
                j += 1;
            }
            i += 1;
        }
        print("\n  After Surrounded \n");
        this.printresult(record, r, c);
    }
}
fun main(args: Array <String> ): Unit
{
    var task: Regions = Regions();
    var record: Array<Array<Char>> = arrayOf(
      arrayOf('O', 'X', 'X', 'X', 'X', 'O', 'X'), 
      arrayOf('X', 'X', 'X', 'X', 'O', 'X', 'O'), 
      arrayOf('O', 'O', 'O', 'X', 'X', 'O', 'O'), 
      arrayOf('X', 'O', 'X', 'X', 'X', 'X', 'X'), 
      arrayOf('X', 'X', 'O', 'X', 'X', 'X', 'X'), 
      arrayOf('X', 'O', 'X', 'X', 'X', 'X', 'X'), 
      arrayOf('X', 'X', 'O', 'O', 'X', 'O', 'O'), 
      arrayOf('X', 'X', 'O', 'X', 'O', 'X', 'O')
    );
    /*
        Change all O with X when O is Surrounded by X
        Example
        ========
        // Left,right, Bottom and Top are have X
            X   X
        X   O   O  X
            X   X
        
        Then change center O with X
            X   X
        X   X   X  X
            X   X
        -----------------------------
        or
            X
        X   O  X
            X   
        Then change center O with X
            X
        X   O  X
            X    
    */
    task.solve(record);
}

Output

  Before Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  O  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  O  X  X  X  X
  X  O  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

  After Surrounded
  O  X  X  X  X  O  X
  X  X  X  X  X  X  O
  O  O  O  X  X  O  O
  X  O  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  X  X  X  X  X
  X  X  O  O  X  O  O
  X  X  O  X  O  X  O

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment







© 2021, kalkicode.com, All rights reserved