Convert a Matrix into another Matrix of given dimensions

07 Mar, 2022
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++
Java
Python3
C#
Javascript
// 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 elementsvoid 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 Codeint 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 program to implement// the above approachimport java.util.*;class GFG{ // Function to construct a matrix of size// A * B from the given matrix elementsstatic 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 Codepublic 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 program to implement# the above approach  # Function to construct a matrix of size A * B# from the given matrix elementsdef 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 Codeif __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# program to implement// the above approachusing System;class GFG{ // Function to construct a matrix of size// A * B from the given matrix elementsstatic 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 Codepublic 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
<script>// javascript program of the above approach // Function to construct a matrix of size// A * B from the given matrix elementsfunction 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>
1 2 3 
4 5 6
 
Time Complexity: O(N * M) Auxiliary Space: O(N * M)
subhammahato348
29AjayKumar
chinmoy1997pal
simranarora5sos
arorakashish0911
array-rearrange
Mathematical
Matrix
Mathematical
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Prime Numbers
Minimum number of jumps to reach end
The Knight's tour problem | Backtracking-1
Matrix Chain Multiplication | DP-8
Print a given matrix in spiral form
Program to find largest element in an array
Rat in a Maze | Backtracking-2
Sudoku | Backtracking-7