Open In App

Convert a Matrix into another Matrix of given dimensions

Improve
Improve
Like Article
Like
Save
Share
Report

Given a matrix, mat[][] of size N * M and two positive integers A and B, the task is to construct a matrix of size A * B from the given matrix elements. If multiple solutions exist, then print any one of them. Otherwise, print -1.

Input: mat[][] = { { 1, 2, 3, 4, 5, 6 } }, A = 2, B = 3 
Output: { { 1, 2, 3 }, { 4, 5, 6 } } 
Explanation
Since the size of the matrix { { 1, 2, 3 }, { 4, 5, 6 } } is A * B(2 * 3). 
Therefore, the required output is { { 1, 2, 3 }, { 4, 5, 6 } }.

Input: mat[][] = { {1, 2}, { 3, 4 }, { 5, 6 } }, A = 1, B = 6 
Output: { { 1, 2, 3, 4, 5, 6 } }

Approach: Follow the steps below to solve the problem:

  • Initialize a matrix of size A * B say, res[][].
  • Traverse the matrix, mat[][] and insert each element of the matrix into the matrix, res[][].
  • Finally, print the matrix res[][].

Below is the implementation of the above approach:

C++




// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to construct a matrix of size 
// A * B from the given matrix elements
void ConstMatrix(int* mat, int N, int M, 
                 int A, int B)
{
    if (N * M != A * B)
        return;
          
    int idx = 0;
  
    // Initialize a new matrix
    int res[A][B];
  
    // Traverse the matrix, mat[][]
    for(int i = 0; i < N; i++) 
    {
        for(int j = 0; j < M; j++)
        {
            res[idx / B][idx % B] = *((mat + i * M) + j);
  
            // Update idx
            idx++;
        }
    }
  
    // Print the resultant matrix
    for(int i = 0; i < A; i++) 
    {
        for(int j = 0; j < B; j++)
            cout << res[i][j] << " ";
              
        cout << "\n";
    }
}
  
// Driver Code
int main()
{
    int mat[][6] = { { 1, 2, 3, 4, 5, 6 } };
    int A = 2;
    int B = 3;
      
    int N = sizeof(mat) / sizeof(mat[0]);
    int M = sizeof(mat[0]) / sizeof(int);
      
    ConstMatrix((int*)mat, N, M, A, B);
      
    return 0;
}
  
// This code is contributed by subhammahato348


Java




// Java program to implement
// the above approach
import java.util.*;
class GFG
{
  
// Function to construct a matrix of size 
// A * B from the given matrix elements
static void ConstMatrix(int[][] mat, int N, int M, 
                 int A, int B)
{
    if (N * M != A * B)
        return;
          
    int idx = 0;
  
    // Initialize a new matrix
    int [][]res = new int[A][B];
  
    // Traverse the matrix, mat[][]
    for(int i = 0; i < N; i++) 
    {
        for(int j = 0; j < M; j++)
        {
            res[idx / B][idx % B] = mat[i][j];
  
            // Update idx
            idx++;
        }
    }
  
    // Print the resultant matrix
    for(int i = 0; i < A; i++) 
    {
        for(int j = 0; j < B; j++)
            System.out.print(res[i][j] + " ");            
        System.out.print("\n");
    }
}
  
// Driver Code
public static void main(String[] args)
{
    int mat[][] = { { 1, 2, 3, 4, 5, 6 } };
    int A = 2;
    int B = 3;    
    int N = mat.length;
    int M = mat[0].length;    
    ConstMatrix(mat, N, M, A, B);    
}
}
  
// This code is contributed by 29AjayKumar 


Python3




# Python3 program to implement
# the above approach
  
  
# Function to construct a matrix of size A * B
# from the given matrix elements
def ConstMatrix(mat, N, M, A, B):
    if (N * M != A * B):
        return -1
    idx = 0;
      
      
    # Initialize a new matrix
    res = [[0 for i in range(B)] for i in range(A)]
      
      
    # Traverse the matrix, mat[][]
    for i in range(N):
        for j in range(M):
            res[idx//B][idx % B] = mat[i][j];
              
              
            # Update idx
            idx += 1
      
      
    # Print the resultant matrix
    for i in range(A):
        for j in range(B):
            print(res[i][j], end = " ")
        print()
  
  
  
# Driver Code
if __name__ == '__main__':
      
    mat = [ [ 1, 2, 3, 4, 5, 6 ] ]
    A = 2
    B = 3
    N = len(mat)
    M = len(mat[0])
    ConstMatrix(mat, N, M, A, B)


C#




// C# program to implement
// the above approach
using System;
class GFG
{
  
// Function to construct a matrix of size 
// A * B from the given matrix elements
static void ConstMatrix(int[,] mat, int N, int M, 
                 int A, int B)
{
    if (N * M != A * B)
        return;        
    int idx = 0;
  
    // Initialize a new matrix
    int [,]res = new int[A,B];
  
    // Traverse the matrix, [,]mat
    for(int i = 0; i < N; i++) 
    {
        for(int j = 0; j < M; j++)
        {
            res[idx / B, idx % B] = mat[i, j];
  
            // Update idx
            idx++;
        }
    }
  
    // Print the resultant matrix
    for(int i = 0; i < A; i++) 
    {
        for(int j = 0; j < B; j++)
            Console.Write(res[i, j] + " ");            
        Console.Write("\n");
    }
}
  
// Driver Code
public static void Main(String[] args)
{
    int [,]mat = {{ 1, 2, 3, 4, 5, 6 }};
    int A = 2;
    int B = 3;    
    int N = mat.GetLength(0);
    int M = mat.GetLength(1);    
    ConstMatrix(mat, N, M, A, B);    
}
}
  
// This code is contributed by 29AjayKumar


Javascript




<script>
// javascript program of the above approach
  
// Function to construct a matrix of size
// A * B from the given matrix elements
function ConstMatrix(mat, N, M,
                 A, B)
{
    if (N * M != A * B)
        return;
           
    let idx = 0;
   
    // Initialize a new matrix
    let res = new Array(A);
    // Loop to create 2D array using 1D array
    for (var i = 0; i < res.length; i++) {
        res[i] = new Array(2);
    }
   
    // Traverse the matrix, mat[][]
    for(let i = 0; i < N; i++)
    {
        for(let j = 0; j < M; j++)
        {
            res[(Math.floor(idx / B))][idx % B] = mat[i][j];
   
            // Update idx
            idx++;
        }
    }
   
    // Print the resultant matrix
    for(let i = 0; i < A; i++)
    {
        for(let j = 0; j < B; j++)
            document.write(res[i][j] + " ");           
        document.write("<br/>");
    }
}
   
    // Driver Code
      
    let mat = [[ 1, 2, 3, 4, 5, 6 ]];
    let A = 2;
    let B = 3;   
    let N = mat.length;
    let M = mat[0].length;   
    ConstMatrix(mat, N, M, A, B);
   
 // This code is contributed by chinmoy1997pal.
</script>


Output: 

1 2 3 
4 5 6

 

Time Complexity: O(N * M) 
Auxiliary Space: O(N * M)



Last Updated : 24 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads