Creating Rectangle in Square Matrix with Two Filled Positions

By | September 27, 2023

Given a square matrix of n order in which two positions are filled. Fill two more positions such that a rectangle is formed by joining all points.

Examples:

Input: n=4
Matrix[][]=  1 0 0 1 
             0 0 0 0
             0 0 0 0
Output:
Matrix[][]= 1 0 0 1 
            1 0 0 1
            0 0 0 0
Input: n=3
Matrix[][]=  1 0 0
             0 0 0
             0 0 1
Output:
Matrix[][]=  1 0 1
             0 0 0
             1 0 1

Approach: 

  • If the marked positions are lying on the same row, increase the row by one position and mark the positions as one.
  • If the marked positions are lying on the same column, increase the column by one position and mark the next position as one.
  • If the marked positions are lying on a different row or different column.
  • The position of the first new position is to determine by the row of the second marked position and the position of the second new position is determined by the column of the second marked position.

Below is the implementation of the above approach:

import java.io.*;

public class Cplusplus {
    // Function to print the matrix
    static void print(int matrix1[][]) {
        for (int i = 0; i < matrix1.length; ++i) {
            for (int j = 0; j < matrix1.length; ++j) {
                System.out.print(matrix1[i][j]);
            }
            System.out.println();
        }
    }

    static void fill(int matrix[][], int length) {
        int first = 0;

        // First new position
        int x = 0;
        int y = 0;
        // Second new position
        int x1 = 0;
        int y1 = 0;
        for (int i = 0; i < length; ++i) {

            for (int j = 0; j < length; ++j) {
                // Store the position of first marked position
                if (matrix[i][j] == 1 && first == 0) {
                    x = i;
                    y = j;
                    ++first;
                }
                // Store the position of the second marked position
                else if (matrix[i][j] == 1) {
                    x1 = i;
                    y1 = j;
                }
            }
        }
        // Checking whether the column of marked position is equal
        if (y == y1) {
            // Increase the column
            matrix[x][(y + 1) % length] = 1;
            matrix[x1][(y1 + 1) % length] = 1;
        }
        // Checking whether the rows of marked position is equal
        else if (x == x1) {
            // Increase the rows
            matrix[(x + 1) % length][y] = 1;
            matrix[(x1 + 1) % length][y1] = 1;
        } else {
            // Interchanging the rows and the columns
            matrix[x][y1] = 1;
            matrix[x1][y] = 1;
        }
        // Print the matrix
        print(matrix);
    }

    public static void main(String[] args) {
        int n = 4;

        int matrix[][] = { { 1, 0, 0, 1 },
                           { 0, 0, 0, 0 },
                           { 0, 0, 0, 0 },
                           { 0, 0, 0, 0 } };
        fill(matrix, n);
    }
}

Output:

1001
1001
0000
0000

Time Complexity: O(n^2)
Space Complexity: O(n^2)

Author: Mithlesh Upadhyay

Mithlesh Upadhyay is a Computer Science and AI expert from Madhya Pradesh with strong academic background (BE in CSE and M.Tech in AI) and over six years of experience in technical content development. He has contributed tech articles, led teams, and worked in Full Stack Development and Data Science. He founded the w3colleges.org portal for learning resources.