Form a Spiral Matrix from the given Array
Given an array, the task is to form a spiral matrix
Examples:
Input: arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Output: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 Input: arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; Output: 1 2 3 4 5 6 14 15 16 17 18 7 13 12 11 10 9 8
Approach: This problem is just the reverse of this problem “Print a given matrix in spiral form“. The approach to do so is:
- Traverse the given array and pick each element one by one.
- Fill each of this element in the spiral matrix order.
- Spiral matrix order is maintained with the help of 4 loops – left, right, top, and bottom.
- Each loop prints its corresponding row/column in the spiral matrix.
Below is the implementation of the above approach:
C++
// C++ program to form a Spiral Matrix // from the given Array #include <bits/stdc++.h> using namespace std; #define R 3 #define C 6 // Function to form the spiral matrix void formSpiralMatrix( int arr[], int mat[R][C]) { int top = 0, bottom = R - 1, left = 0, right = C - 1; int index = 0; while (1) { if (left > right) break ; // print top row for ( int i = left; i <= right; i++) mat[top][i] = arr[index++]; top++; if (top > bottom) break ; // print right column for ( int i = top; i <= bottom; i++) mat[i][right] = arr[index++]; right--; if (left > right) break ; // print bottom row for ( int i = right; i >= left; i--) mat[bottom][i] = arr[index++]; bottom--; if (top > bottom) break ; // print left column for ( int i = bottom; i >= top; i--) mat[i][left] = arr[index++]; left++; } } // Function to print the spiral matrix void printSpiralMatrix( int mat[R][C]) { for ( int i = 0; i < R; i++) { for ( int j = 0; j < C; j++) cout << mat[i][j] << " " ; cout << '\n' ; } } // Driver code int main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; int mat[R][C]; formSpiralMatrix(arr, mat); printSpiralMatrix(mat); return 0; } |
Java
// Java program to form a Spiral Matrix // from the given Array class GFG { static final int R = 3 ; static final int C = 6 ; // Function to form the spiral matrix static void formSpiralMatrix( int arr[], int mat[][]) { int top = 0 , bottom = R - 1 , left = 0 , right = C - 1 ; int index = 0 ; while ( true ) { if (left > right) break ; // print top row for ( int i = left; i <= right; i++) mat[top][i] = arr[index++]; top++; if (top > bottom) break ; // print right column for ( int i = top; i <= bottom; i++) mat[i][right] = arr[index++]; right--; if (left > right) break ; // print bottom row for ( int i = right; i >= left; i--) mat[bottom][i] = arr[index++]; bottom--; if (top > bottom) break ; // print left column for ( int i = bottom; i >= top; i--) mat[i][left] = arr[index++]; left++; } } // Function to print the spiral matrix static void printSpiralMatrix( int mat[][]) { for ( int i = 0 ; i < R; i++) { for ( int j = 0 ; j < C; j++) System.out.print(mat[i][j] + " " ); System.out.println(); } } // Driver code public static void main (String[] args) { int arr[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 }; int mat[][] = new int [R][C]; formSpiralMatrix(arr, mat); printSpiralMatrix(mat); } } // This code is contributed by kanugargng |
Python3
# Python program to form a Spiral Matrix # from the given Array R = 3 ; C = 6 ; # Function to form the spiral matrix def formSpiralMatrix(arr, mat): top = 0 ; bottom = R - 1 ; left = 0 ; right = C - 1 ; index = 0 ; while ( True ): if (left > right): break ; # print top row for i in range (left, right + 1 ): mat[top][i] = arr[index]; index + = 1 ; top + = 1 ; if (top > bottom): break ; # print right column for i in range (top, bottom + 1 ): mat[i][right] = arr[index]; index + = 1 ; right - = 1 ; if (left > right): break ; # print bottom row for i in range (right, left - 1 , - 1 ): mat[bottom][i] = arr[index]; index + = 1 ; bottom - = 1 ; if (top > bottom): break ; # print left column for i in range (bottom, top - 1 , - 1 ): mat[i][left] = arr[index]; index + = 1 ; left + = 1 ; # Function to print the spiral matrix def printSpiralMatrix(mat): for i in range (R): for j in range (C): print (mat[i][j],end = " " ); print (); # Driver code if __name__ = = '__main__' : arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 ]; mat = [[ 0 for i in range (C)] for j in range (R)]; formSpiralMatrix(arr, mat); printSpiralMatrix(mat); # This code contributed by PrinciRaj1992 |
C#
// C# program to form a Spiral Matrix // from the given Array using System; class GFG { static readonly int R = 3; static readonly int C = 6; // Function to form the spiral matrix static void formSpiralMatrix( int []arr, int [,]mat) { int top = 0, bottom = R - 1, left = 0, right = C - 1; int index = 0; while ( true ) { if (left > right) break ; // print top row for ( int i = left; i <= right; i++) mat[top, i] = arr[index++]; top++; if (top > bottom) break ; // print right column for ( int i = top; i <= bottom; i++) mat[i, right] = arr[index++]; right--; if (left > right) break ; // print bottom row for ( int i = right; i >= left; i--) mat[bottom, i] = arr[index++]; bottom--; if (top > bottom) break ; // print left column for ( int i = bottom; i >= top; i--) mat[i, left] = arr[index++]; left++; } } // Function to print the spiral matrix static void printSpiralMatrix( int [,]mat) { for ( int i = 0; i < R; i++) { for ( int j = 0; j < C; j++) Console.Write(mat[i, j] + " " ); Console.WriteLine(); } } // Driver code public static void Main (String[] args) { int []arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; int [,]mat = new int [R, C]; formSpiralMatrix(arr, mat); printSpiralMatrix(mat); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // Javascript program to form a Spiral Matrix // from the given Array const R = 3; const C = 6; // Function to form the spiral matrix function formSpiralMatrix(arr, mat) { let top = 0, bottom = R - 1, left = 0, right = C - 1; let index = 0; while (1) { if (left > right) break ; // Print top row for (let i = left; i <= right; i++) mat[top][i] = arr[index++]; top++; if (top > bottom) break ; // Print right column for (let i = top; i <= bottom; i++) mat[i][right] = arr[index++]; right--; if (left > right) break ; // print bottom row for (let i = right; i >= left; i--) mat[bottom][i] = arr[index++]; bottom--; if (top > bottom) break ; // Print left column for (let i = bottom; i >= top; i--) mat[i][left] = arr[index++]; left++; } } // Function to print the spiral matrix function printSpiralMatrix(mat) { for (let i = 0; i < R; i++) { for (let j = 0; j < C; j++) document.write(mat[i][j] + " " ); document.write( "<br>" ); } } // Driver code let arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ]; let mat = new Array(R); for (let i = 0; i < R; i++) mat[i] = new Array(C); formSpiralMatrix(arr, mat); printSpiralMatrix(mat); // This code is contributed by subham348 </script> |
Output:
1 2 3 4 5 6 14 15 16 17 18 7 13 12 11 10 9 8
Time complexity: O(m*n) where m is number of rows and n is number of columns of a given matrix
Auxiliary Space: O(m*n), To store the matrix
Contact Us