Given a 2D array, print it in spiral form. See the following examples.
Examples:
Input: 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 Input: 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 12 18 17 16 15 14 13 7 8 9 10 11
Solution:
C/C++
/* This code is adopted from the solution given #include <stdio.h> #define R 3 #define C 6 void spiralPrint( int m, int n, int a[R][C]) { int i, k = 0, l = 0; /* k - starting row index m - ending row index l - starting column index n - ending column index i - iterator */ while (k < m && l < n) { /* Print the first row from the remaining rows */ for (i = l; i < n; ++i) { printf ( "%d " , a[k][i]); } k++; /* Print the last column from the remaining columns */ for (i = k; i < m; ++i) { printf ( "%d " , a[i][n-1]); } n--; /* Print the last row from the remaining rows */ if ( k < m) { for (i = n-1; i >= l; --i) { printf ( "%d " , a[m-1][i]); } m--; } /* Print the first column from the remaining columns */ if (l < n) { for (i = m-1; i >= k; --i) { printf ( "%d " , a[i][l]); } l++; } } } /* Driver program to test above functions */ int main() { int a[R][C] = { {1, 2, 3, 4, 5, 6}, {7, 8, 9, 10, 11, 12}, {13, 14, 15, 16, 17, 18} }; spiralPrint(R, C, a); return 0; } |
Java
// Java program to print a given matrix in spiral form import java.io.*; class GFG { // Function print matrix in spiral form static void spiralPrint( int m, int n, int a[][]) { int i, k = 0 , l = 0 ; /* k - starting row index m - ending row index l - starting column index n - ending column index i - iterator */ while (k < m && l < n) { // Print the first row from the remaining rows for (i = l; i < n; ++i) { System.out.print(a[k][i]+ " " ); } k++; // Print the last column from the remaining columns for (i = k; i < m; ++i) { System.out.print(a[i][n- 1 ]+ " " ); } n--; // Print the last row from the remaining rows */ if ( k < m) { for (i = n- 1 ; i >= l; --i) { System.out.print(a[m- 1 ][i]+ " " ); } m--; } // Print the first column from the remaining columns */ if (l < n) { for (i = m- 1 ; i >= k; --i) { System.out.print(a[i][l]+ " " ); } l++; } } } // driver program public static void main (String[] args) { int R = 3 ; int C = 6 ; int a[][] = { { 1 , 2 , 3 , 4 , 5 , 6 }, { 7 , 8 , 9 , 10 , 11 , 12 }, { 13 , 14 , 15 , 16 , 17 , 18 } }; spiralPrint(R,C,a); } } // Contributed by Pramod Kumar |
Python3
# Python3 program to print # given matrix in spiral form def spiralPrint(m, n, a) : k = 0 ; l = 0 ''' k - starting row index m - ending row index l - starting column index n - ending column index i - iterator ''' while (k < m and l < n) : # Print the first row from # the remaining rows for i in range (l, n) : print (a[k][i], end = " " ) k + = 1 # Print the last column from # the remaining columns for i in range (k, m) : print (a[i][n - 1 ], end = " " ) n - = 1 # Print the last row from # the remaining rows if ( k < m) : for i in range (n - 1 , (l - 1 ), - 1 ) : print (a[m - 1 ][i], end = " " ) m - = 1 # Print the first column from # the remaining columns if (l < n) : for i in range (m - 1 , k - 1 , - 1 ) : print (a[i][l], end = " " ) l + = 1 # Driver Code a = [ [ 1 , 2 , 3 , 4 , 5 , 6 ], [ 7 , 8 , 9 , 10 , 11 , 12 ], [ 13 , 14 , 15 , 16 , 17 , 18 ] ] R = 3 ; C = 6 spiralPrint(R, C, a) # This code is contributed by Nikita Tiwari. |
C#
// C# program to print a given // matrix in spiral form using System; class GFG { // Function print matrix in spiral form static void spiralPrint( int m, int n, int [,]a) { int i, k = 0, l = 0; /* k - starting row index m - ending row index l - starting column index n - ending column index i - iterator */ while (k < m && l < n) { // Print the first row from the remaining rows for (i = l; i < n; ++i) { Console.Write(a[k, i] + " " ); } k++; // Print the last column from the remaining columns for (i = k; i < m; ++i) { Console.Write(a[i,n - 1]+ " " ); } n--; // Print the last row from the remaining rows */ if ( k < m) { for (i = n-1; i >= l; --i) { Console.Write(a[m - 1, i]+ " " ); } m--; } // Print the first column from the remaining columns */ if (l < n) { for (i = m-1; i >= k; --i) { Console.Write(a[i, l] + " " ); } l++; } } } // Driver program public static void Main () { int R = 3; int C = 6; int [,]a = { {1, 2, 3, 4, 5, 6}, {7, 8, 9, 10, 11, 12}, {13, 14, 15, 16, 17, 18} }; spiralPrint(R,C,a); } } // This code is contributed by Sam007 |
PHP
<?php // PHP program to print a given // matrix in spiral form $R = 3; $C = 6; function spiralPrint( $m , $n , & $a ) { $k = 0; $l = 0; /* $k - starting row index $m - ending row index $l - starting column index $n - ending column index $i - iterator */ while ( $k < $m && $l < $n ) { /* Print the first row from the remaining rows */ for ( $i = $l ; $i < $n ; ++ $i ) { echo $a [ $k ][ $i ] . " " ; } $k ++; /* Print the last column from the remaining columns */ for ( $i = $k ; $i < $m ; ++ $i ) { echo $a [ $i ][ $n - 1] . " " ; } $n --; /* Print the last row from the remaining rows */ if ( $k < $m ) { for ( $i = $n - 1; $i >= $l ; -- $i ) { echo $a [ $m - 1][ $i ] . " " ; } $m --; } /* Print the first column from the remaining columns */ if ( $l < $n ) { for ( $i = $m - 1; $i >= $k ; -- $i ) { echo $a [ $i ][ $l ] . " " ; } $l ++; } } } // Driver code $a = array ( array (1, 2, 3, 4, 5, 6), array (7, 8, 9, 10, 11, 12), array (13, 14, 15, 16, 17, 18)); spiralPrint( $R , $C , $a ); // This code is contributed // by ChitraNayal ?> |
Output:
1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11
Time Complexity: Time complexity of the above solution is O(mn).
Please write comments if you find the above code incorrect, or find other ways to solve the same problem.
This article is attributed to GeeksforGeeks.org
0
0
leave a comment
0 Comments