# Print a given matrix in spiral form

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  ` `   ``@ http://effprog.blogspot.com/2011/01/spiral-printing-of-two-dimensional.html */` ` `  `#include ` `#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; ` `} `

/div>

## 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

 `= ``\$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.