Open In App

Find a way to fill matrix with 1’s and 0’s in blank positions

Improve
Improve
Like Article
Like
Save
Share
Report

Given an N * M matrix mat[][] which consists of two types of characters ‘.’ and ‘_’. The task is to fill the matrix in positions where it contains ‘.’ with 1‘s and 0‘s. Fill the matrix in such a way that no two adjacent cells contain the same number and print the modified matrix.
Examples: 
 

Input: mat[][] = {{‘.’, ‘_’}, {‘_’, ‘.’}} 
Output: 
1 _ 
_ 1
Input: mat[][] = {{‘_’, ‘_’}, {‘_’, ‘_’}} 
Output: 
_ _ 
_ _ 
There is no place to fill the numbers. 
 

 

Approach: An efficient approach is to fill the matrix in the following pattern: 
 

10101010… 
01010101… 
10101010… 
 

skipping ‘_’ characters whenever encountered.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
#define N 2
#define M 2
 
// Function to generate and
// print the required matrix
void Matrix(char a[N][M])
{
    char ch = '1';
 
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
 
            // Replace the '.'
            if (a[i][j] == '.')
                a[i][j] = ch;
 
            // Toggle number
            ch = (ch == '1') ? '0' : '1';
 
            cout << a[i][j] << " ";
        }
        cout << endl;
 
        // For each row, change
        // the starting number
        if (i % 2 == 0)
            ch = '0';
        else
            ch = '1';
    }
}
 
// Driver code
int main()
{
    char a[N][M] = { { '.', '_' },
                     { '_', '.' } };
 
    Matrix(a);
 
    return 0;
}


Java




// Java implementation of the approach
import java.io.*;
 
class GFG
{
 
static int N = 2;
static int M = 2;
 
// Function to generate and
// print the required matrix
static void Matrix(char a[][])
{
    char ch = '1';
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
 
            // Replace the '.'
            if (a[i][j] == '.')
                a[i][j] = ch;
 
            // Toggle number
            ch = (ch == '1') ? '0' : '1';
 
            System.out.print( a[i][j] + " ");
        }
        System.out.println();
 
        // For each row, change
        // the starting number
        if (i % 2 == 0)
            ch = '0';
        else
            ch = '1';
    }
}
 
    // Driver code
    public static void main (String[] args)
    {
        char a[][] = { { '.', '_' },
                    { '_', '.' } };
 
        Matrix(a);
    }
}
 
// This code is contributed by anuj_67..


Python3




# Python3 implementation of the approach
 
N = 2
M = 2
 
# Function to generate and
# print the required matrix
def Matrix(a) :
    ch = '1';
 
    for i in range(N) :
        for j in range(M) :
 
            # Replace the '.'
            if (a[i][j] == '.') :
                a[i][j] = ch;
 
            # Toggle number
            if (ch == '1') :
                ch == '0'
            else :
                ch = '1'
 
            print(a[i][j],end = " ");
             
        print()
 
        # For each row, change
        # the starting number
        if (i % 2 == 0) :
            ch = '0';
        else :
            ch = '1';
 
# Driver code
if __name__ == "__main__" :
 
    a = [
            [ '.', '_' ],
            [ '_', '.' ],
        ]
 
    Matrix(a);
     
# This code is contributed by AnkitRai01


C#




// C# implementation of the approach
using System;
     
class GFG
{
 
static int N = 2;
static int M = 2;
 
// Function to generate and
// print the required matrix
static void Matrix(char [,]a)
{
    char ch = '1';
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
 
            // Replace the '.'
            if (a[i,j] == '.')
                a[i,j] = ch;
 
            // Toggle number
            ch = (ch == '1') ? '0' : '1';
 
            Console.Write( a[i,j] + " ");
        }
        Console.WriteLine();
 
        // For each row, change
        // the starting number
        if (i % 2 == 0)
            ch = '0';
        else
            ch = '1';
    }
}
 
// Driver code
public static void Main (String[] args)
{
    char [,]a = { { '.', '_' },
                { '_', '.' } };
 
    Matrix(a);
}
}
 
// This code has been contributed by 29AjayKumar


Javascript




<script>
 
// Javascript implementation of the approach
 
const N = 2;
const M = 2;
 
// Function to generate and
// print the required matrix
function Matrix(a)
{
    let ch = '1';
 
    for (let i = 0; i < N; i++) {
        for (let j = 0; j < M; j++) {
 
            // Replace the '.'
            if (a[i][j] == '.')
                a[i][j] = ch;
 
            // Toggle number
            ch = (ch == '1') ? '0' : '1';
 
            document.write(a[i][j] + " ");
        }
        document.write("<br>");
 
        // For each row, change
        // the starting number
        if (i % 2 == 0)
            ch = '0';
        else
            ch = '1';
    }
}
 
// Driver code
    let a = [ [ '.', '_' ],
                     [ '_', '.' ] ];
 
    Matrix(a);
 
</script>


Output: 

1 _ 
_ 1

 

Time Complexity : O(N*M)

Auxiliary Space: O(1)



Last Updated : 31 May, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads