Print a matrix in a spiral form starting from a point
Given a matrix of size n*m, and a point P(c, r). Print the matrix in a spiral form(clockwise) starting from the point P.
Examples :
Input : mat[][] = {{1 2 3}, {4 5 6}, {7 8 9}} Point P = (0, 2) Output : 3 6 5 2 9 8 7 4 1 The starting point is top left which is 3.
This problem is mainly an extension of print a matrix in spiral form.
Implementation:
C++
// C++ program to print a matrix in spiral // form. #include <iostream> using namespace std; const int MAX = 100; void printSpiral( int mat[][MAX], int r, int c) { int i, a = 0, b = 2; int low_row = (0 > a) ? 0 : a; int low_column = (0 > b) ? 0 : b - 1; int high_row = ((a + 1) >= r) ? r - 1 : a + 1; int high_column = ((b + 1) >= c) ? c - 1 : b + 1; while ((low_row > 0 - r && low_column > 0 - c)) { for (i = low_column + 1; i <= high_column && i < c && low_row >= 0; ++i) cout << mat[low_row][i] << " " ; low_row -= 1; for (i = low_row + 2; i <= high_row && i < r && high_column < c; ++i) cout << mat[i][high_column] << " " ; high_column += 1; for (i = high_column - 2; i >= low_column && i >= 0 && high_row < r; --i) cout << mat[high_row][i] << " " ; high_row += 1; for (i = high_row - 2; i > low_row && i >= 0 && low_column >= 0; --i) cout << mat[i][low_column] << " " ; low_column -= 1; } cout << endl; } // Driver code int main() { int mat[][MAX] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int r = 3, c = 3; printSpiral(mat, r, c); } |
Java
// Java program to print a // matrix in spiral form import java.io.*; class GFG { static void printSpiral( int [][]mat, int r, int c) { int i, a = 0 , b = 2 ; int low_row = ( 0 > a) ? 0 : a; int low_column = ( 0 > b) ? 0 : b - 1 ; int high_row = ((a + 1 ) >= r) ? r - 1 : a + 1 ; int high_column = ((b + 1 ) >= c) ? c - 1 : b + 1 ; while ((low_row > 0 - r && low_column > 0 - c)) { for (i = low_column + 1 ; i <= high_column && i < c && low_row >= 0 ; ++i) System.out.print (mat[low_row][i] + " " ); low_row -= 1 ; for (i = low_row + 2 ; i <= high_row && i < r && high_column < c; ++i) System.out.print(mat[i][high_column] + " " ); high_column += 1 ; for (i = high_column - 2 ; i >= low_column && i >= 0 && high_row < r; --i) System.out.print(mat[high_row][i] + " " ); high_row += 1 ; for (i = high_row - 2 ; i > low_row && i >= 0 && low_column >= 0 ; --i) System.out.print(mat[i][low_column] + " " ); low_column -= 1 ; } System.out.println(); } // Driver code static public void main (String[] args) { int [][]mat = {{ 1 , 2 , 3 }, { 4 , 5 , 6 }, { 7 , 8 , 9 }}; int r = 3 , c = 3 ; // Function calling printSpiral(mat, r, c); } } // This code is contributed by vt_m. |
Python 3
# Python3 program to print a matrix # in spiral form. MAX = 100 def printSpiral(mat, r, c): a = 0 b = 2 low_row = 0 if ( 0 > a) else a low_column = 0 if ( 0 > b) else b - 1 high_row = r - 1 if ((a + 1 ) > = r) else a + 1 high_column = c - 1 if ((b + 1 ) > = c) else b + 1 while ((low_row > 0 - r and low_column > 0 - c)): i = low_column + 1 while (i < = high_column and i < c and low_row > = 0 ): print ( mat[low_row][i], end = " " ) i + = 1 low_row - = 1 i = low_row + 2 while (i < = high_row and i < r and high_column < c): print (mat[i][high_column], end = " " ) i + = 1 high_column + = 1 i = high_column - 2 while (i > = low_column and i > = 0 and high_row < r): print (mat[high_row][i], end = " " ) i - = 1 high_row + = 1 i = high_row - 2 while (i > low_row and i > = 0 and low_column > = 0 ): print (mat[i][low_column], end = " " ) i - = 1 low_column - = 1 print () # Driver code if __name__ = = "__main__" : mat = [[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]] r = 3 c = 3 printSpiral(mat, r, c) # This code is contributed by ita_c |
C#
// C# program to print a // matrix in spiral form using System; class GFG { static void printSpiral( int [,]mat, int r, int c) { int i, a = 0, b = 2; int low_row = (0 > a) ? 0 : a; int low_column = (0 > b) ? 0 : b - 1; int high_row = ((a + 1) >= r) ? r - 1 : a + 1; int high_column = ((b + 1) >= c) ? c - 1 : b + 1; while ((low_row > 0 - r && low_column > 0 - c)) { for (i = low_column + 1; i <= high_column && i < c && low_row >= 0; ++i) Console.Write (mat[low_row,i] + " " ); low_row -= 1; for (i = low_row + 2; i <= high_row && i < r && high_column < c; ++i) Console.Write(mat[i,high_column] + " " ); high_column += 1; for (i = high_column - 2; i >= low_column && i >= 0 && high_row < r; --i) Console.Write(mat[high_row,i] + " " ); high_row += 1; for (i = high_row - 2; i > low_row && i >= 0 && low_column >= 0; --i) Console.Write(mat[i,low_column] + " " ); low_column -= 1; } Console.WriteLine(); } // Driver code static public void Main () { int [,]mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int r = 3, c = 3; // Function calling printSpiral(mat, r, c); } } // This code is contributed by vt_m. |
PHP
<?php // PHP program to print a // matrix in spiral form. $MAX = 100; function printSpiral( $mat , $r , $c ) { global $MAX ; $i ; $a = 0; $b = 2; $low_row = (0 > $a ) ? 0 : $a ; $low_column = (0 > $b ) ? 0 : $b - 1; $high_row = (( $a + 1) >= $r ) ? $r - 1 : $a + 1; $high_column = (( $b + 1) >= $c ) ? $c - 1 : $b + 1; while (( $low_row > 0 - $r && $low_column > 0 - $c )) { for ( $i = $low_column + 1; $i <= $high_column && $i < $c && $low_row >= 0; ++ $i ) echo $mat [ $low_row ][ $i ], " " ; $low_row -= 1; for ( $i = $low_row + 2; $i <= $high_row && $i < $r && $high_column < $c ; ++ $i ) echo $mat [ $i ][ $high_column ] , " " ; $high_column += 1; for ( $i = $high_column - 2; $i >= $low_column && $i >= 0 && $high_row < $r ; -- $i ) echo $mat [ $high_row ][ $i ] , " " ; $high_row += 1; for ( $i = $high_row - 2; $i > $low_row && $i >= 0 && $low_column >= 0; -- $i ) echo $mat [ $i ][ $low_column ] , " " ; $low_column -= 1; } echo "\n" ; } // Driver code $mat = array ( array (1, 2, 3), array (4, 5, 6), array (7, 8, 9)); $r = 3; $c = 3; printSpiral( $mat , $r , $c ); // This code is contributed by aj_36 ?> |
Javascript
<script> // Javascript program to print a matrix in spiral // form. const MAX = 100; function printSpiral(mat, r, c) { let i, a = 0, b = 2; let low_row = (0 > a) ? 0 : a; let low_column = (0 > b) ? 0 : b - 1; let high_row = ((a + 1) >= r) ? r - 1 : a + 1; let high_column = ((b + 1) >= c) ? c - 1 : b + 1; while ((low_row > 0 - r && low_column > 0 - c)) { for (i = low_column + 1; i <= high_column && i < c && low_row >= 0; ++i) document.write(mat[low_row][i] + " " ); low_row -= 1; for (i = low_row + 2; i <= high_row && i < r && high_column < c; ++i) document.write(mat[i][high_column] + " " ); high_column += 1; for (i = high_column - 2; i >= low_column && i >= 0 && high_row < r; --i) document.write(mat[high_row][i] + " " ); high_row += 1; for (i = high_row - 2; i > low_row && i >= 0 && low_column >= 0; --i) document.write(mat[i][low_column] + " " ); low_column -= 1; } document.write( "<br>" ); } // Driver code let mat = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]; let r = 3, c = 3; printSpiral(mat, r, c); // This code is contributed by rishavmahato348. </script> |
Output
3 6 5 2 9 8 7 4 1
Time Complexity: O(max(low_row,low_column) x max(high_row , high_column))
Auxiliary Space: O(1)
Contact Us