Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • DSA
  • Interview Questions on Array
  • Practice Array
  • MCQs on Array
  • Tutorial on Array
  • Types of Arrays
  • Array Operations
  • Subarrays, Subsequences, Subsets
  • Reverse Array
  • Static Vs Arrays
  • Array Vs Linked List
  • Array | Range Queries
  • Advantages & Disadvantages
Open In App
Next Article:
Matrix Chain Multiplication
Next article icon

A Boolean Matrix Question

Last Updated : 11 Dec, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report
Try it on GfG Practice
redirect icon

Given a boolean matrix mat where each cell contains either 0 or 1, the task is to modify it such that if a matrix cell matrix[i][j] is 1 then all the cells in its ith row and jth column will become 1.

Examples:

Input: [[1, 0],
           [0, 0]]
Output: [[1, 1],
              [1, 0]]

Input: [[1, 0, 0, 1],
           [0, 0, 1, 0],
          [0, 0, 0, 0]]
Output: [[1, 1, 1, 1],
               [1, 1, 1, 1],
              [1, 0, 1, 1]]

[Naive Approach] By Marking the Matrix

Assuming all the elements in the matrix are non-negative. Traverse through the matrix and if you find an element with value 1, then change all the zeros in its row and column to -1. The reason for not changing other elements to 1, but -1, is because that might affect other columns and rows.

Now traverse through the matrix again and if an element is -1 change it to 1, which will be the answer.

C++
// C++ Code For Boolean Matrix Question // By Marking the Matrix  #include <iostream> #include <vector> using namespace std;  void booleanMatrix(vector<vector<int>>& mat) {     int rows = mat.size(), cols = mat[0].size();        for (int i = 0; i < rows; i++) {         for (int j = 0; j < cols; j++) {             if (mat[i][j] == 1) {                              	// Replace all the zeros in jth column by -1               	for (int idx = 0; idx < rows; idx++) {                   	if (mat[idx][j] == 0) {                       	mat[idx][j] = -1;                     }                 }               	               	// Replace all the zeros in ith row by -1               	for (int idx = 0; idx < cols; idx++) {                   	if (mat[i][idx] == 0) {                       	mat[i][idx] = -1;                     }                 }             }         }     }      	// Replace all the -1 by 1     for (int i = 0; i < rows; i++) {         for (int j = 0; j < cols; j++) {             if (mat[i][j] == -1) {                 mat[i][j] = 1;             }         }     } }  int main() {     vector<vector<int>> mat = {{1, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 0, 0}};     booleanMatrix(mat);     for (const vector<int>& row : mat) {         for (int val : row) {             cout << val << " ";         }         cout << endl;     }     return 0; } 
Java
// Java Code For Boolean Matrix Question // By Marking the Matrix class GfG {     static void booleanMatrix(int[][] mat) {         int rows = mat.length, cols = mat[0].length;          for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (mat[i][j] == 1) {                                        // Replace all the zeros in jth column by -1                     for (int idx = 0; idx < rows; idx++) {                         if (mat[idx][j] == 0) {                             mat[idx][j] = -1;                         }                     }                      // Replace all the zeros in ith row by -1                     for (int idx = 0; idx < cols; idx++) {                         if (mat[i][idx] == 0) {                             mat[i][idx] = -1;                         }                     }                 }             }         }          // Replace all the -1 by 1         for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (mat[i][j] == -1) {                     mat[i][j] = 1;                 }             }         }     }      public static void main(String[] args) {         int[][] mat = {{1, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 0, 0}};         booleanMatrix(mat);         for (int[] row : mat) {             for (int val : row) {                 System.out.print(val + " ");             }             System.out.println();         }     } } 
Python
# python3 Code For Boolean Matrix Question # By Marking the Matrix def booleanMatrix(mat):     rows, cols = len(mat), len(mat[0])      for i in range(rows):         for j in range(cols):             if mat[i][j] == 1:                 # Replace all the zeros in jth column by -1                 for idx in range(rows):                     if mat[idx][j] == 0:                         mat[idx][j] = -1                  # Replace all the zeros in ith row by -1                 for idx in range(cols):                     if mat[i][idx] == 0:                         mat[i][idx] = -1      # Replace all the -1 by 1     for i in range(rows):         for j in range(cols):             if mat[i][j] == -1:                 mat[i][j] = 1  if __name__ == "__main__":     mat = [[1, 0, 0, 1], [0, 0, 1, 0], [0, 0, 0, 0]]     booleanMatrix(mat)     for row in mat:         print(" ".join(map(str, row))) 
C#
// C# Code For Boolean Matrix Question // By Marking the Matrix using System;  class GfG {     static void booleanMatrix(int[, ] mat) {         int rows = mat.GetLength(0), cols = mat.GetLength(1);          for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (mat[i, j] == 1) {                                        // Replace all the zeros in jth column                     // by -1                     for (int idx = 0; idx < rows; idx++) {                         if (mat[idx, j] == 0) {                             mat[idx, j] = -1;                         }                     }                      // Replace all the zeros in ith row by                     // -1                     for (int idx = 0; idx < cols; idx++) {                         if (mat[i, idx] == 0) {                             mat[i, idx] = -1;                         }                     }                 }             }         }          // Replace all the -1 by 1         for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (mat[i, j] == -1) {                     mat[i, j] = 1;                 }             }         }     }      static void Main() {         int[, ] mat = { { 1, 0, 0, 1 },                         { 0, 0, 1, 0 },                         { 0, 0, 0, 0 } };                booleanMatrix(mat);         for (int i = 0; i < mat.GetLength(0); i++) {             for (int j = 0; j < mat.GetLength(1); j++) {                 Console.Write(mat[i, j] + " ");             }             Console.WriteLine();         }     } } 
JavaScript
// Javascript Code For Boolean Matrix Question // By Marking the Matrix function booleanMatrix(mat) {     let rows = mat.length, cols = mat[0].length;      for (let i = 0; i < rows; i++) {         for (let j = 0; j < cols; j++) {             if (mat[i][j] === 1) {                              // Replace all the zeros in jth column by -1                 for (let idx = 0; idx < rows; idx++) {                     if (mat[idx][j] === 0) {                         mat[idx][j] = -1;                     }                 }                  // Replace all the zeros in ith row by -1                 for (let idx = 0; idx < cols; idx++) {                     if (mat[i][idx] === 0) {                         mat[i][idx] = -1;                     }                 }             }         }     }      // Replace all the -1 by 1     for (let i = 0; i < rows; i++) {         for (let j = 0; j < cols; j++) {             if (mat[i][j] === -1) {                 mat[i][j] = 1;             }         }     } }  // Driver Code let mat = [[1, 0, 0, 1], [0, 0, 1, 0], [0, 0, 0, 0]]; booleanMatrix(mat); mat.forEach(row => {     console.log(row.join(' ')); }); 

Output
1 1 1 1  1 1 1 1  1 0 1 1  

Time Complexity: O((n * m)*(n + m)) where n is number of rows and m is number of columns in given matrix.
O(n * m) for traversing through each element and (n+m) for traversing to row and column of matrix elements having value 1.
Space Complexity: O(1)

[Better Approach] Using Extra Space

The idea is to use two temporary arrays, rowMarker[] and colMarker[], to keep track of which rows and columns need to be updated.

Following are the steps for this approach

  • Create two temporary arrays rowMarker[] and colMarker[]. Initialize all values of rowMarker[] and colMarker[] as 0. 
  • Traverse the input matrix mat[][]. If you finds mat[i][j] as 1, then mark rowMarker[i] and colMarker[j] as true. 
  • Traverse the input matrix mat[][] again. For each entry mat[i][j], check the values of rowMarker[i] and colMarker[j]. If any of the two values (rowMarker[i] or colMarker[j]) is true, then mark mat[i][j] as 1.
C++
// C++ Code For Boolean Matrix Question // Using two extra arrays #include <iostream> #include <vector> using namespace std;  void booleanMatrix(vector<vector<int>>& mat) {     int rows = mat.size();     int cols = mat[0].size();      // Arrays to keep track of rows and columns to be updated     vector<bool> rowMarker(rows, false);     vector<bool> colMarker(cols, false);      // Mark the rows and columns that need to be updated     for (int i = 0; i < rows; i++) {         for (int j = 0; j < cols; j++) {             if (mat[i][j] == 1) {                 rowMarker[i] = true;                 colMarker[j] = true;             }         }     }      // Update the matrix     for (int i = 0; i < rows; i++) {         for (int j = 0; j < cols; j++) {             if (rowMarker[i] || colMarker[j]) {                 mat[i][j] = 1;             }         }     } }  int main() {     vector<vector<int>> mat = {         {1, 0, 0, 1},         {0, 0, 1, 0},         {0, 0, 0, 0}     };        booleanMatrix(mat);     for (const vector<int>& row : mat) {         for (int val : row) {             cout << val << " ";         }         cout << endl;     }     return 0; } 
Java
// Java Code For Boolean Matrix Question // Using two extra arrays import java.util.*;  class GfG {     static void booleanMatrix(int mat[][]) {         int rows = mat.length;         int cols = mat[0].length;          // Arrays to keep track of rows and columns to be marked         boolean[] rowMarker = new boolean[rows];         boolean[] colMarker = new boolean[cols];          // First pass: Mark the rows and columns to be updated         for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (mat[i][j] == 1) {                     rowMarker[i] = true;                     colMarker[j] = true;                 }             }         }          // Second pass: Update the matrix         for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (rowMarker[i] || colMarker[j]) {                     mat[i][j] = 1;                 }             }         }     }      public static void main(String[] args) {         int[][] arr = {              { 1, 0, 0, 1 },             { 0, 0, 1, 0 },             { 0, 0, 0, 0 }          };         booleanMatrix(arr);         for (int i = 0; i < arr.length; i++) {             for (int j = 0; j < arr[0].length; j++) {                 System.out.print(arr[i][j] + " ");             }             System.out.println();         }     } } 
Python
# python3 Code For Boolean Matrix Question # Using two extra arrays def booleanMatrix(mat):     rows = len(mat)     cols = len(mat[0])      # Arrays to keep track of rows and columns to be updated     rowMarker = [False] * rows     colMarker = [False] * cols      # First pass: Mark the rows and columns to be updated     for i in range(rows):         for j in range(cols):             if mat[i][j] == 1:                 rowMarker[i] = True                 colMarker[j] = True      # Second pass: Update the matrix     for i in range(rows):         for j in range(cols):             if rowMarker[i] or colMarker[j]:                 mat[i][j] = 1  if __name__ == "__main__":     arr = [[1, 0, 0, 1],            [0, 0, 1, 0],            [0, 0, 0, 0]]     booleanMatrix(arr)     for row in arr:         print(" ".join(map(str, row))) 
C#
// C# Code For Boolean Matrix Question // Using two extra arrays using System; using System.Collections.Generic;  class GfG {     static void booleanMatrix(List<List<int>> mat) {         int rows = mat.Count;         int cols = mat[0].Count;          // Arrays to keep track of rows and columns to be updated         bool[] rowMarker = new bool[rows];         bool[] colMarker = new bool[cols];          // First pass: Mark the rows and columns to be updated         for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (mat[i][j] == 1) {                     rowMarker[i] = true;                     colMarker[j] = true;                 }             }         }          // Second pass: Update the matrix         for (int i = 0; i < rows; i++) {             for (int j = 0; j < cols; j++) {                 if (rowMarker[i] || colMarker[j]) {                     mat[i][j] = 1;                 }             }         }     }      // Test the BooleanMatrix function with a sample input     static void Main(string[] args) {         List<List<int>> arr = new List<List<int>> {             new List<int>{ 1, 0, 0, 1 },             new List<int>{ 0, 0, 1, 0 },             new List<int>{ 0, 0, 0, 0 }         };          booleanMatrix(arr);         foreach (var row in arr) {             Console.WriteLine(string.Join(" ", row));         }     } } 
JavaScript
// Javascript Code For Boolean Matrix Question // Using two extra arrays function booleanMatrix(mat) {      const rows = mat.length;     const cols = mat[0].length;      // Arrays to keep track of rows and columns to be     // updated     const rowMarker = new Array(rows).fill(false);     const colMarker = new Array(cols).fill(false);      // First pass: Mark the rows and columns to be updated     for (let i = 0; i < rows; i++) {         for (let j = 0; j < cols; j++) {             if (mat[i][j] === 1) {                 rowMarker[i] = true;                 colMarker[j] = true;             }         }     }      // Second pass: Update the matrix     for (let i = 0; i < rows; i++) {         for (let j = 0; j < cols; j++) {             if (rowMarker[i] || colMarker[j]) {                 mat[i][j] = 1;             }         }     } }  // Driver Code const arr = [ [ 1, 0, 0, 1 ],  			  [ 0, 0, 1, 0 ],  			  [ 0, 0, 0, 0 ] ]; booleanMatrix(arr); arr.forEach(row => console.log(row.join(" "))); 

Output
1 1 1 1  1 1 1 1  1 0 1 1  

Time Complexity: O(n * m) where n is number of rows and m is number of columns in given matrix.
Auxiliary Space: O(n + m) as we are taking two arrays one of size m and another of size n.

[Expected Approach] Without Using Extra Space

Instead of taking two dummy arrays we can use the first row and first column of the matrix for the same work. This will help to reduce the space complexity of the problem. While traversing for the second time, the first row and column will be computed first, which will affect the values of further elements. So we traverse in the reverse direction.
Since matrix[0][0] are overlapping in first row and first column. Therefore take separate variable col0 (say) to check if the 0th column has 1 or not and use matrix[0][0] to check if the 0th row has 1 or not. Now traverse from the last element to the first element and check if matrix[i][0]==1 || matrix[0][j]==1 and if true set matrix[i][j]=1, else continue.

C++
// C++ Code For Boolean Matrix Question // Most Optimised Approach #include <iostream> #include <vector> using namespace std;  void booleanMatrix(vector<vector<int>>& mat) {     int col0 = 0, rows = mat.size(),         cols = mat[0].size();      // Step 1: Mark the first row and      // column if there is a 1 in the matrix     for (int i = 0; i < rows; i++) {              // Check if 0th column contains 1         if (mat[i][0] == 1) col0 = 1;          for (int j = 1; j < cols; j++) {             if (mat[i][j] == 1) {                 mat[i][0] = 1;                   mat[0][j] = 1;               }         }     }      // Step 2: Traverse the matrix in      // reverse direction and update values     for (int i = rows - 1; i >= 0; i--) {         for (int j = cols - 1; j >= 1; j--) {             if (mat[i][0] == 1 || mat[0][j] == 1) {                 mat[i][j] = 1;             }         }         if (col0 == 1) {             mat[i][0] = 1;         }     } }  int main() {     vector<vector<int>> arr = {{1, 0, 0, 1},                                 {0, 0, 1, 0},                                 {0, 0, 0, 0}};          booleanMatrix(arr);      for (int i = 0; i < arr.size(); i++) {         for (int j = 0; j < arr[0].size(); j++) {             cout << arr[i][j] << " ";         }         cout << endl;     }     return 0; } 
Java
// Java Code For Boolean Matrix Question // Most Optimised Approach import java.util.*;  class GfG {      static void booleanMatrix(int mat[][]) {         int col0 = 0;     	int rows = mat.length, cols = mat[0].length;          // Step 1: Mark the first row and          // column if there is a 1 in the matrix         for (int i = 0; i < rows; i++) {                       // Check if 0th column contains 1             if (mat[i][0] == 1) col0 = 1;             for (int j = 1; j < cols; j++) {                 if (mat[i][j] == 1) {                     mat[i][0] = 1;                       mat[0][j] = 1;                   }             }         }          // Step 2: Traverse the matrix in reverse         // direction and update values         for (int i = rows - 1; i >= 0; i--) {             for (int j = cols - 1; j >= 1; j--) {                 if (mat[i][0] == 1 || mat[0][j] == 1) {                     mat[i][j] = 1;                   }             }             if (col0 == 1) {                 mat[i][0] = 1;             }         }     }      public static void main(String[] args) {         int[][] arr = {             {1, 0, 0, 1},             {0, 0, 1, 0},             {0, 0, 0, 0}         };                  booleanMatrix(arr);                  for (int i = 0; i < arr.length; i++) {             for (int j = 0; j < arr[0].length; j++) {                 System.out.print(arr[i][j] + " ");             }             System.out.println();         }     } } 
Python
# python3 Code For Boolean Matrix Question # Most Optimised Approach def booleanMatrix(mat):     col0 = 0     rows = len(mat)     cols = len(mat[0])      # Step 1: Mark the first row and column     # if there is a 1 in the matrix     for i in range(rows):                # Check if 0th column contains 1         if mat[i][0] == 1:             col0 = 1           for j in range(1, cols):             if mat[i][j] == 1:                 mat[i][0] = 1                   mat[0][j] = 1        # Step 2: Traverse the matrix in reverse     # direction and update values     for i in range(rows - 1, -1, -1):         for j in range(cols - 1, 0, -1):             if mat[i][0] == 1 or mat[0][j] == 1:                 mat[i][j] = 1           if col0 == 1:             mat[i][0] = 1   if __name__ == "__main__":     arr = [         [1, 0, 0, 1],         [0, 0, 1, 0],         [0, 0, 0, 0]     ]          booleanMatrix(arr)          for row in arr:         print(" ".join(map(str, row))) 
C#
// C# Code For Boolean Matrix Question // Most Optimised Approach using System;  class GfG {      static void booleanMatrix(int[,] mat) {         int col0 = 0, rows = mat.GetLength(0),             cols = mat.GetLength(1);          // Step 1: Mark the first row and column         // if there is a 1 in the matrix         for (int i = 0; i < rows; i++) {                      // Check if 0th column contains 1             if (mat[i, 0] == 1) col0 = 1;              for (int j = 1; j < cols; j++) {                 if (mat[i, j] == 1) {                     mat[i, 0] = 1;                       mat[0, j] = 1;                   }             }         }          // Step 2: Traverse the matrix in reverse         // direction and update values         for (int i = rows - 1; i >= 0; i--) {             for (int j = cols - 1; j >= 1; j--) {                 if (mat[i, 0] == 1 || mat[0, j] == 1) {                     mat[i, j] = 1;                   }             }             if (col0 == 1) {                 mat[i, 0] = 1;             }         }     }      static void Main() {         int[,] arr = {             {1, 0, 0, 1},             {0, 0, 1, 0},             {0, 0, 0, 0}         };          booleanMatrix(arr);          for (int i = 0; i < arr.GetLength(0); i++) {             for (int j = 0; j < arr.GetLength(1); j++) {                 Console.Write(arr[i, j] + " ");             }             Console.WriteLine();         }     } } 
JavaScript
// Javascript Code For Boolean Matrix Question // Most Optimised Approach function booleanMatrix(mat) {     let col0 = 0;     const rows = mat.length;     const cols = mat[0].length;      // Step 1: Mark the first row and column      // if there is a 1 in the matrix     for (let i = 0; i < rows; i++) {         // Check if 0th column contains 1         if (mat[i][0] === 1) col0 = 1;          for (let j = 1; j < cols; j++) {             if (mat[i][j] === 1) {                 mat[i][0] = 1;                   mat[0][j] = 1;               }         }     }      // Step 2: Traverse the matrix in reverse direction and update values     for (let i = rows - 1; i >= 0; i--) {         for (let j = cols - 1; j >= 1; j--) {             if (mat[i][0] === 1 || mat[0][j] === 1) {                 mat[i][j] = 1;             }         }         if (col0 === 1) {             mat[i][0] = 1;         }     } }  // Driver Code const arr = [     [1, 0, 0, 1],     [0, 0, 1, 0],     [0, 0, 0, 0] ];  booleanMatrix(arr);  for (let i = 0; i < arr.length; i++) {     console.log(arr[i].join(" ")); } 

Output
1 1 1 1  1 1 1 1  1 0 1 1  

Time Complexity: O(n * m) where n is number of rows and m is number of columns in given matrix.
Auxiliary Space: O(1)


Next Article
Matrix Chain Multiplication

K

kartik
Improve
Article Tags :
  • Matrix
  • DSA
  • Arrays
  • Amazon
  • Morgan Stanley
  • VMWare
  • SAP Labs
  • Ola Cabs
  • FactSet
  • Boomerang Commerce
Practice Tags :
  • Amazon
  • Boomerang Commerce
  • FactSet
  • Morgan Stanley
  • Ola Cabs
  • SAP Labs
  • VMWare
  • Arrays
  • Matrix

Similar Reads

    Matrix Data Structure
    Matrix Data Structure is a two-dimensional array arranged in rows and columns. It is commonly used to represent mathematical matrices and is fundamental in various fields like mathematics, computer graphics, and data processing. Matrices allow for efficient storage and manipulation of data in a stru
    2 min read
    Matrix or Grid or 2D Array - Complete Tutorial
    Matrix or Grid is a two-dimensional array mostly used in mathematical and scientific calculations. It is also considered as an array of arrays, where array at each index has the same size. Representation of Matrix Data Structure:As you can see from the below image, the elements are organized in rows
    11 min read
    Row-wise vs column-wise traversal of matrix
    Two common ways of traversing a matrix are row-major-order and column-major-order Row Major Order: When matrix is accessed row by row. Column Major Order: When matrix is accessed column by column.Examples: Input : mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}Output : Row-wise: 1 2 3 4 5 6 7 8 9 Col-wi
    6 min read
    Applications of Matrices and Determinants
    Applications of Matrices and Determinants: One application of matrices and determinants is that they can be used to solve linear equations in two or three variables. Matrices and determinants are also used to check the consistency of any system, whether they are consistent or not. This is the most u
    6 min read

    Basic Operations on Matrix

    Traverse a given Matrix using Recursion
    Given a matrix mat[][] of size n x m, the task is to traverse this matrix using recursion.Examples: Input: mat[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]Output: 1 2 3 4 5 6 7 8 9Input: mat[][] = [[11, 12, 13], [14, 15, 16], [17, 18, 19]]Output: 11 12 13 14 15 16 17 18 19Approach: Check If the current p
    5 min read
    Rotate Matrix Clockwise by 1
    Given a square matrix, the task is to rotate its elements clockwise by one step.Examples:Input 1 2 34 5 6 7 8 9Output: 4 1 27 5 3 8 9 6Input: 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16 Output: 5 1 2 3 9 10 6 4 13 11 7 8 14 15 16 12The idea is to use nested loops to move elements in four directions (right
    9 min read
    Sort the given matrix
    Given a m x n matrix. The problem is to sort the given matrix in strict order. Here strict order means that the matrix is sorted in a way such that all elements in a row are sorted in increasing order and for row ‘i’, where 1 <= i <= m-1, the first element is greater than or equal to the last
    5 min read
    Search element in a sorted matrix
    Given a sorted matrix mat[][] of size nxm and an element x, the task is to find if x is present in the matrix or not. Matrix is sorted in a way such that all elements in a row are sorted in increasing order and for row i, where 1 <= i <= n-1, the first element of row i is greater than or equal
    13 min read
    Program to find transpose of a matrix
    Given a matrix of size n X m, find the transpose of the matrix. Transpose of a matrix is obtained by changing rows to columns and columns to rows. In other words, transpose of mat[n][m] is obtained by changing mat[i][j] to mat[j][i].Example:Approach using (N^2) spaceRun a nested loop using two integ
    9 min read
    Adjoint and Inverse of a Matrix
    Given a square matrix, find the adjoint and inverse of the matrix. We strongly recommend you to refer determinant of matrix as a prerequisite for this. Adjoint (or Adjugate) of a matrix is the matrix obtained by taking the transpose of the cofactor matrix of a given square matrix is called its Adjoi
    15+ min read
    Program to find Determinant of a Matrix
    The determinant of a Matrix is defined as a special number that is defined only for square matrices (matrices that have the same number of rows and columns). A determinant is used in many places in calculus and other matrices related to algebra, it actually represents the matrix in terms of a real n
    15+ min read

    Easy problems on Matrix

    Print matrix in zig-zag fashion
    Given a matrix of 2D array of n rows and m columns. Print this matrix in ZIG-ZAG fashion as shown in figure. Example: Input: {{1, 2, 3}{4, 5, 6}{7, 8, 9}}Output: 1 2 4 7 5 3 6 8 9Input : [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]Output:: 1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16Thi
    10 min read
    Program for scalar multiplication of a matrix
    Given a 2D matrix mat[][] with n rows and m columns and a scalar element k, the task is to find out the scalar product of the given matrix.Examples: Input: mat[][] = [[2, 3], [5, 4]]k = 5Output: [[10, 15], [25, 20]]Input:mat[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]k = 4Output: [[4, 8, 12], [16, 20, 2
    4 min read
    Print a given matrix in spiral form
    Given a matrix mat[][] of size m x n, the task is to print all elements of the matrix in spiral form.Examples: Input: mat[][] = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]Output: [ 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10 ]Example of matrix in spiral formInput: mat[]
    14 min read
    Find distinct elements common to all rows of a matrix
    Given a n x n matrix. The problem is to find all the distinct elements common to all rows of the matrix. The elements can be printed in any order. Examples: Input : mat[][] = { {2, 1, 4, 3}, {1, 2, 3, 2}, {3, 6, 2, 3}, {5, 2, 5, 3} } Output : 2 3 Input : mat[][] = { {12, 1, 14, 3, 16}, {14, 2, 1, 3,
    15+ min read
    Find unique elements in a matrix
    Given a matrix mat[][] having n rows and m columns. The task is to find unique elements in the matrix i.e., those elements which are not repeated in the matrix or those elements whose frequency is 1. Examples: Input: mat[][] = [[2, 1, 4, 3], [1, 2, 3, 2], [3, 6, 2, 3], [5, 2, 5, 3]]Output: 4 6Input:
    5 min read
    Find maximum element of each row in a matrix
    Given a matrix mat[][], the task is to find the maximum element of each row.Examples: Input: mat[][] = [[1, 2, 3] [1, 4, 9] [76, 34, 21]]Output :3976Input: mat[][] = [[1, 2, 3, 21] [12, 1, 65, 9] [1, 56, 34, 2]]Output :216556The idea is to run the loop for no_of_rows. Check each element inside the r
    4 min read
    Shift matrix elements row-wise by k
    Given a square matrix mat[][] and a number k. The task is to shift the first k elements of each row to the right of the matrix. Examples : Input : mat[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} k = 2 Output :mat[N][N] = {{3, 1, 2} {6, 4, 5} {9, 7, 8}} Input : mat[N][N] = {{1, 2, 3, 4} {5, 6, 7, 8} {9
    6 min read
    Swap major and minor diagonals of a square matrix
    Given a square matrix mat[][] of order n*n, the task is to swap the elements of major and minor diagonals.The major and minor diagonal matrix explanation is given below:Major Diagonal Elements of a Matrix: The Major Diagonal Elements are the ones that occur from the Top Left of the Matrix Down To th
    6 min read
    Squares of Matrix Diagonal Elements
    Given an integer matrix mat[][] of odd dimensions, the task is to find the square of the elements of the Primary and Secondary diagonals.The Primary and Secondary diagonal matrix explanation is given below:Primary Diagonal Elements of a Matrix: The Primary Diagonal Elements are the ones that occur f
    11 min read
    Sum of middle row and column in Matrix
    Given an integer matrix of odd dimensions (3 * 3, 5 * 5). then the task is to find the sum of the middle row & column elements. Examples: Input : 2 5 7 3 7 2 5 6 9 Output : Sum of middle row = 12 Sum of middle column = 18 Input : 1 3 5 6 7 3 5 3 2 1 1 2 3 4 5 7 9 2 1 6 9 1 5 3 2 Output : Sum of
    7 min read
    Program to check idempotent matrix
    Given a square matrix mat[][] of order n*n, the task is to check if it is an Idempotent Matrix or not.Idempotent matrix: A matrix is said to be an idempotent matrix if the matrix multiplied by itself returns the same matrix, i.e. the matrix mat[][] is said to be an idempotent matrix if and only if M
    5 min read
    Program to check diagonal matrix and scalar matrix
    Given a square matrix mat[][] of order n*n, the task is to check if it is a Diagonal Matrix and Scalar matrix.Diagonal Matrix: A square matrix is said to be a diagonal matrix if the elements of the matrix except the main diagonal are zero. A square null matrix is also a diagonal matrix whose main di
    9 min read
    Program to check Identity Matrix
    Given a square matrix mat[][] of order n*n, the task is to check if it is an Identity Matrix.Identity Matrix: A square matrix is said to be an identity matrix if the elements of main diagonal are one and all other elements are zero. The identity Matrix is also known as the Unit Matrix. Examples: Inp
    5 min read
    Mirror of matrix across diagonal
    Given a 2-D array of order N x N, print a matrix that is the mirror of the given tree across the diagonal. We need to print the result in a way: swap the values of the triangle above the diagonal with the values of the triangle below it like a mirror image swap. Print the 2-D array obtained in a mat
    14 min read
    Program for addition of two matrices
    Given two N x M matrices. Find a N x M matrix as the sum of given matrices each value at the sum of values of corresponding elements of the given two matrices. Approach: Below is the idea to solve the problem.Iterate over every cell of matrix (i, j), add the corresponding values of the two matrices
    5 min read
    Program for subtraction of matrices
    Given two m x n matrices m1 and m2, the task is to subtract m2 from m1 and return res.Input: m1 = {{1, 2}, {3, 4}}, m2 = {{4, 3}, {2, 1}}Output: {{-3, -1}, {1, 3}}Input: m1 = {{3, 3, 3}, {3, 3, 3}}, m1 = {{2, 2, 2}, {1, 1, 1}},Output: {{1, 1, 1}, {2, 2, 2}},We traverse both matrices element by eleme
    5 min read

    Intermediate problems on Matrix

    Program for Conway's Game Of Life | Set 1
    Given a Binary Matrix mat[][] of order m*n. A cell with a value of zero is a Dead Cell, while a cell with a value of one is a Live Cell. The state of cells in a matrix mat[][] is known as Generation. The task is to find the next generation of cells based on the following rules:Any live cell with few
    12 min read
    Program to multiply two matrices
    Given two matrices, the task is to multiply them. Matrices can either be square or rectangular:Examples: (Square Matrix Multiplication)Input: m1[m][n] = { {1, 1}, {2, 2} }m2[n][p] = { {1, 1}, {2, 2} }Output: res[m][p] = { {3, 3}, {6, 6} }(Rectangular Matrix Multiplication)Input: m1[3][2] = { {1, 1},
    7 min read
    Rotate an Image 90 Degree Counterclockwise
    Given an image represented by m x n matrix, rotate the image by 90 degrees in counterclockwise direction. Please note the dimensions of the result matrix are going to n x m for an m x n input matrix.Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Output: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13Input: 1
    6 min read
    Check if all rows of a matrix are circular rotations of each other
    Given a matrix of n*n size, the task is to find whether all rows are circular rotations of each other or not. Examples: Input: mat[][] = 1, 2, 3 3, 1, 2 2, 3, 1 Output: Yes All rows are rotated permutation of each other. Input: mat[3][3] = 1, 2, 3 3, 2, 1 1, 3, 2 Output: No Explanation : As 3, 2, 1
    8 min read
    Largest Cross Bordered Square
    Given a matrix mat[][] of size n x n where every element is either 'O' or 'X', the task is to find the size of the largest square subgrid that is completely surrounded by 'X', i.e. the largest square where all its border cells are 'X'. Examples: Input: mat[][] = [ ['X', 'X'], ['X', 'X'] ]Output: 2Ex
    15 min read
    Count zeros in a row wise and column wise sorted matrix
    Given a n x n binary matrix (elements in matrix can be either 1 or 0) where each row and column of the matrix is sorted in ascending order, count number of 0s present in it.Examples: Input: [0, 0, 0, 0, 1][0, 0, 0, 1, 1][0, 1, 1, 1, 1][1, 1, 1, 1, 1][1, 1, 1, 1, 1]Output: 8Input: [0, 0][0, 0]Output:
    6 min read
    Queries in a Matrix
    Given two integers m and n, that describes the order m*n of a matrix mat[][], initially filled with integers from 1 to m*n sequentially in a row-major order. Also, there is a 2d array query[][] consisting of q queries, which contains three integers each, where the first integer t describes the type
    15 min read
    Find pairs with given sum such that elements of pair are in different rows
    Given a matrix of distinct values and a sum. The task is to find all the pairs in a given matrix whose summation is equal to the given sum. Each element of a pair must be from different rows i.e; the pair must not lie in the same row.Examples: Input : mat[][] = {{1, 3, 2, 4}, {5, 8, 7, 6}, {9, 10, 1
    15+ min read
    Find all permuted rows of a given row in a matrix
    Given a matrix mat[][] of order m*n, and an index ind. The task is to find all the rows in the matrix mat[][] which are permutations of rows at index ind.Note: All the elements of a row are distinct.Examples: Input: mat[][] = [[3, 1, 4, 2], [1, 6, 9, 3], [1, 2, 3, 4], [4, 3, 2, 1]] ind = 3 Output: 0
    9 min read
    Find number of transformation to make two Matrix Equal
    Given two matrices a and b of size n*m. The task is to find the required number of transformation steps so that both matrices become equal. Print -1 if this is not possible. The transformation step is as follows: Select any one matrix out of two matrices. Choose either row/column of the selected mat
    8 min read
    Inplace (Fixed space) M x N size matrix transpose
    Given an M x N matrix, transpose the matrix without auxiliary memory.It is easy to transpose matrix using an auxiliary array. If the matrix is symmetric in size, we can transpose the matrix inplace by mirroring the 2D array across it's diagonal (try yourself). How to transpose an arbitrary size matr
    15+ min read
    Minimum flip required to make Binary Matrix symmetric
    Given a Binary Matrix mat[][] of size n x n, consisting of 1s and 0s. The task is to find the minimum flips required to make the matrix symmetric along the main diagonal.Examples : Input: mat[][] = [[0, 0, 1], [1, 1, 1], [1, 0, 0]];Output: 2Value of mat[1][0] is not equal to mat[0][1].Value of mat[2
    8 min read
    Magic Square of Odd Order
    Given a positive integer n, your task is to generate a magic square of order n * n. A magic square of order n is an n * n grid filled with the numbers 1 through n² so that every row, every column, and both main diagonals each add up to the same total, called the magic constant (or magic sum) M. Beca
    15+ min read

    Hard problems on Matrix

    Number of Islands
    Given an n x m grid of 'W' (Water) and 'L' (Land), the task is to count the number of islands. An island is a group of adjacent 'L' cells connected horizontally, vertically, or diagonally, and it is surrounded by water or the grid boundary. The goal is to determine how many distinct islands exist in
    15+ min read
    A Boolean Matrix Question
    Given a boolean matrix mat where each cell contains either 0 or 1, the task is to modify it such that if a matrix cell matrix[i][j] is 1 then all the cells in its ith row and jth column will become 1.Examples:Input: [[1, 0], [0, 0]]Output: [[1, 1], [1, 0]]Input: [[1, 0, 0, 1], [0, 0, 1, 0], [0, 0, 0
    15+ min read
    Matrix Chain Multiplication
    Given the dimension of a sequence of matrices in an array arr[], where the dimension of the ith matrix is (arr[i-1] * arr[i]), the task is to find the most efficient way to multiply these matrices together such that the total number of element multiplications is minimum. When two matrices of size m*
    15+ min read
    Maximum size rectangle binary sub-matrix with all 1s
    Given a 2d binary matrix mat[][], the task is to find the maximum size rectangle binary-sub-matrix with all 1's. Examples: Input: mat = [ [0, 1, 1, 0], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0] ]Output : 8Explanation : The largest rectangle with only 1's is from (1, 0) to (2, 3) which is[1, 1, 1, 1][
    15 min read
    Construct Ancestor Matrix from a Given Binary Tree
    Given a Binary Tree where all values are from 0 to n-1. Construct an ancestor matrix mat[n][n] where the ancestor matrix is defined as below. mat[i][j] = 1 if i is ancestor of jmat[i][j] = 0, otherwiseExamples: Input: Output: {{0 1 1} {0 0 0} {0 0 0}}Input: Output: {{0 0 0 0 0 0} {1 0 0 0 1 0} {0 0
    15+ min read
    K'th element in spiral form of matrix
    Given a matrix of size n * m. You have to find the kth element which will obtain while traversing the matrix spirally starting from the top-left corner of the matrix.Examples:Input: mat[][] = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ], k = 4Output: 6Explanation: Spiral traversal of matrix: {1, 2, 3, 6, 9,
    13 min read
    Largest Plus or '+' formed by all ones in a binary square matrix
    Given an n × n binary matrix mat consisting of 0s and 1s. Your task is to find the size of the largest ‘+’ shape that can be formed using only 1s. A ‘+’ shape consists of a center cell with four arms extending in all four directions (up, down, left, and right) while remaining within the matrix bound
    10 min read
    Shortest path in a Binary Maze
    Given an M x N matrix where each element can either be 0 or 1. We need to find the shortest path between a given source cell to a destination cell. The path can only be created out of a cell if its value is 1.Note: You can move into an adjacent cell in one of the four directions, Up, Down, Left, and
    15+ min read
    Maximum sum square sub-matrix of given size
    Given a 2d array mat[][] of order n * n, and an integer k. Your task is to find a submatrix of order k * k, such that sum of all the elements in the submatrix is maximum possible.Note: Matrix mat[][] contains zero, positive and negative integers.Examples:Input: k = 3mat[][] = [ [ 1, 2, -1, 4 ] [ -8,
    15+ min read
    Validity of a given Tic-Tac-Toe board configuration
    A Tic-Tac-Toe board is given after some moves are played. Find out if the given board is valid, i.e., is it possible to reach this board position after some moves or not.Note that every arbitrary filled grid of 9 spaces isn't valid e.g. a grid filled with 3 X and 6 O isn't valid situation because ea
    15+ min read
    Minimum Initial Points to Reach Destination
    Given a m*n grid with each cell consisting of positive, negative, or no points i.e., zero points. From a cell (i, j) we can move to (i+1, j) or (i, j+1) and we can move to a cell only if we have positive points ( > 0 ) when we move to that cell. Whenever we pass through a cell, points in that cel
    15+ min read
    Program for Sudoku Generator
    Given an integer k, the task is to generate a 9 x 9 Sudoku grid having k empty cells while following the below set of rules:In all 9 submatrices 3x3, the elements should be 1-9, without repetition.In all rows, there should be elements between 1-9, without repetition.In all columns, there should be e
    15+ min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences