Open In App

Print a given matrix in counter-clock wise spiral form

Improve
Improve
Like Article
Like
Save
Share
Report

Given a 2D array, print it in counter-clock wise 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 5 9 13 14 15 16 12 8 4 3 2 6 10 11 7 

Input:
        1   2   3   4  5   6
        7   8   9  10  11  12
        13  14  15 16  17  18
Output: 
1 7 13 14 15 16 17 18 12 6 5 4 3 2 8 9 10 11 

Explanation : 
 

Below is the implementation : 
 

C++




// C++ implementation to print
// the counter clock wise
// spiral traversal of matrix
#include <bits/stdc++.h>
using namespace std;
 
#define R 4
#define C 4
 
// function to print the
// required traversal
void counterClockspiralPrint(int m,
                             int n,
                             int arr[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
 
    // initialize the count
    int cnt = 0;
 
    // total number of
    // elements in matrix
    int total = m * n;
 
    while (k < m && l < n)
    {
        if (cnt == total)
            break;
 
        // Print the first column
        // from the remaining columns
        for (i = k; i < m; ++i)
        {
            cout << arr[i][l] << " ";
            cnt++;
        }
        l++;
 
        if (cnt == total)
            break;
 
        // Print the last row from
        // the remaining rows
        for (i = l; i < n; ++i)
        {
            cout << arr[m - 1][i] << " ";
            cnt++;
        }
        m--;
 
        if (cnt == total)
            break;
 
        // Print the last column
        // from the remaining columns
        if (k < m)
        {
            for (i = m - 1; i >= k; --i)
            {
                cout << arr[i][n - 1] << " ";
                cnt++;
            }
            n--;
        }
 
        if (cnt == total)
            break;
 
        // Print the first row
        // from the remaining rows
        if (l < n)
        {
            for (i = n - 1; i >= l; --i)
            {
                cout << arr[k][i] << " ";
                cnt++;
            }
            k++;
        }
    }
}
 
// Driver Code
int main()
{
    int arr[R][C] = {{ 1, 2, 3, 4 },
                     { 5, 6, 7, 8 },
                     { 9, 10, 11, 12 },
                     { 13, 14, 15, 16 }};
    counterClockspiralPrint(R, C, arr);
    return 0;
}


C




// C implementation to print
// the counter clock wise
// spiral traversal of matrix
#include <stdio.h>
 
#define R 4
#define C 4
 
// function to print the
// required traversal
void counterClockspiralPrint(int m, int n, int arr[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
 
  // initialize the count
  int cnt = 0;
 
  // total number of
  // elements in matrix
  int total = m * n;
 
  while (k < m && l < n)
  {
    if (cnt == total)
      break;
 
    // Print the first column
    // from the remaining columns
    for (i = k; i < m; ++i)
    {
      printf("%d ",arr[i][l]);
      cnt++;
    }
    l++;
 
    if (cnt == total)
      break;
 
    // Print the last row from
    // the remaining rows
    for (i = l; i < n; ++i)
    {
      printf("%d ",arr[m - 1][i]);
      cnt++;
    }
    m--;
 
    if (cnt == total)
      break;
 
    // Print the last column
    // from the remaining columns
    if (k < m)
    {
      for (i = m - 1; i >= k; --i)
      {
        printf("%d ",arr[i][n - 1]);
        cnt++;
      }
      n--;
    }
 
    if (cnt == total)
      break;
 
    // Print the first row
    // from the remaining rows
    if (l < n)
    {
      for (i = n - 1; i >= l; --i)
      {
        printf("%d ",arr[k][i]);
        cnt++;
      }
      k++;
    }
  }
}
 
// Driver Code
int main()
{
  int arr[R][C] = {{ 1, 2, 3, 4 },
                   { 5, 6, 7, 8 },
                   { 9, 10, 11, 12 },
                   { 13, 14, 15, 16 }};
  counterClockspiralPrint(R, C, arr);
  return 0;
}
 
// This code is contributed by kothavvsaakash


Java




// Java implementation to print
// the counter clock wise
// spiral traversal of matrix
import java.io.*;
 
class GFG
{
    static int R = 4;
    static int C = 4;
 
    // function to print the
    // required traversal
    static void counterClockspiralPrint(int m,
                                        int n,
                                        int arr[][])
    {
        int i, k = 0, l = 0;
 
    /* k - starting row index
        m - ending row index
        l - starting column index
        n - ending column index
        i - iterator */
 
        // initialize the count
        int cnt = 0;
 
        // total number of
        // elements in matrix
        int total = m * n;
 
        while (k < m && l < n)
        {
            if (cnt == total)
                break;
 
            // Print the first column
            // from the remaining columns
            for (i = k; i < m; ++i)
            {
                System.out.print(arr[i][l] + " ");
                cnt++;
            }
            l++;
 
            if (cnt == total)
                break;
 
            // Print the last row from
            // the remaining rows
            for (i = l; i < n; ++i)
            {
                System.out.print(arr[m - 1][i] + " ");
                cnt++;
            }
            m--;
 
            if (cnt == total)
                break;
 
            // Print the last column
            // from the remaining columns
            if (k < m)
            {
                for (i = m - 1; i >= k; --i)
                {
                    System.out.print(arr[i][n - 1] + " ");
                    cnt++;
                }
                n--;
            }
 
            if (cnt == total)
                break;
 
            // Print the first row
            // from the remaining rows
            if (l < n)
            {
                for (i = n - 1; i >= l; --i)
                {
                    System.out.print(arr[k][i] + " ");
                    cnt++;
                }
                k++;
            }
        }
    }
 
// 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 } };
     
    // Function calling            
    counterClockspiralPrint(R, C, arr);
}
}
 
// This code is contributed by vt_m


Python3




# Python3 implementation to print
# the counter clock wise
# spiral traversal of matrix
R = 4
C = 4
 
# Function to print
# the required traversal
def counterClockspiralPrint(m, n, arr) :
    k = 0; l = 0
     
    # k - starting row index
    # m - ending row index
    # l - starting column index
    # n - ending column index
    # i - iterator
 
    # initialize the count
    cnt = 0
 
    # total number of
    # elements in matrix
    total = m * n
 
    while (k < m and l < n) :
        if (cnt == total) :
            break
 
        # Print the first column
        # from the remaining columns
        for i in range(k, m) :
            print(arr[i][l], end = " ")
            cnt += 1
         
        l += 1
 
        if (cnt == total) :
            break
 
        # Print the last row from
        # the remaining rows
        for i in range (l, n) :
            print( arr[m - 1][i], end = " ")
            cnt += 1
         
        m -= 1
         
        if (cnt == total) :
            break
 
        # Print the last column 
        # from the remaining columns
        if (k < m) :
            for i in range(m - 1, k - 1, -1) :
                print(arr[i][n - 1], end = " ")
                cnt += 1
            n -= 1
 
        if (cnt == total) :
            break
 
        # Print the first row
        # from the remaining rows
        if (l < n) :
            for i in range(n - 1, l - 1, -1) :
                print( arr[k][i], end = " ")
                cnt += 1
                 
            k += 1
             
 
# Driver Code
arr = [ [ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ],
        [ 9, 10, 11, 12 ],
        [ 13, 14, 15, 16 ] ]
         
counterClockspiralPrint(R, C, arr)
 
# This code is contributed by Nikita Tiwari


C#




// C# implementation to print
// the counter clock wise
// spiral traversal of matrix;
using System;
 
class GFG
{
    static int R = 4;
    static int C = 4;
 
    // function to print the required traversal
    static void counterClockspiralPrint(int m,
                                        int n,
                                        int[,] arr)
    {
        int i, k = 0, l = 0;
 
        // k - starting row index
        // m - ending row index
        // l - starting column index
        // n - ending column index
        // i - iterator
 
        // initialize the count
        int cnt = 0;
 
        // total number of elements in matrix
        int total = m * n;
 
        while (k < m && l < n)
        {
            if (cnt == total)
                break;
 
            // Print the first column from
            // the remaining columns
            for (i = k; i < m; ++i)
            {
                Console.Write(arr[i,l] + " ");
                cnt++;
            }
            l++;
 
            if (cnt == total)
                break;
 
            // Print the last row from
            // the remaining rows
            for (i = l; i < n; ++i)
            {
                Console.Write(arr[m - 1, i] + " ");
                cnt++;
            }
            m--;
 
            if (cnt == total)
                break;
 
            // Print the last column from
            // the remaining columns
            if (k < m) {
                for (i = m - 1; i >= k; --i)
                {
                    Console.Write(arr[i, n - 1] + " ");
                    cnt++;
                }
                n--;
            }
 
            if (cnt == total)
                break;
 
            // Print the first row from
            // the remaining rows
            if (l < n)
            {
                for (i = n - 1; i >= l; --i)
                {
                    Console.Write(arr[k, i] + " ");
                    cnt++;
                }
                k++;
            }
        }
    }
 
// Driver code
public static void Main()
{
    int[,] arr =new int[,] {{1, 2, 3, 4},
                            {5, 6, 7, 8},
                            {9, 10, 11, 12},
                            {13, 14, 15, 16}};
     
    // Function calling    
    counterClockspiralPrint(R, C, arr);
}
}
 
// This code is contributed by KRV.


PHP




<?php
// PHP implementation to print
// the counter clock wise
// spiral traversal of matrix
 
$R = 4;
$C = 4;
 
// function to print
// the required traversal
function counterClockspiralPrint($m, $n,
                                 $arr)
{
    $i; $k = 0; $l = 0;
 
    /* k - starting row index
        m - ending row index
        l - starting column index
        n - ending column index
        i - iterator */
 
    // initialize the count
    $cnt = 0;
 
    // total number of
    // elements in matrix
    $total = $m * $n;
 
    while ($k < $m and $l < $n)
    {
        if ($cnt == $total)
            break;
 
        // Print the first column
        // from the remaining columns
        for ($i = $k; $i < $m; ++$i)
        {
            echo $arr[$i][$l] ," ";
            $cnt++;
        }
        $l++;
 
        if ($cnt == $total)
            break;
 
        // Print the last row from
        // the remaining rows
        for ($i = $l; $i < $n; ++$i)
        {
            echo $arr[$m - 1][$i] , " ";
            $cnt++;
        }
        $m--;
 
        if ($cnt == $total)
            break;
 
        // Print the last column
        // from the remaining columns
        if ($k < $m)
        {
            for ($i = $m - 1; $i >= $k; --$i)
            {
                echo $arr[$i][$n - 1] , " ";
                $cnt++;
            }
            $n--;
        }
 
        if ($cnt == $total)
            break;
 
        // Print the first row
        // from the remaining rows
        if ($l < $n) {
            for ($i = $n - 1; $i >= $l; --$i)
            {
                echo $arr[$k][$i] , " ";
                $cnt++;
            }
            $k++;
        }
    }
}
 
// Driver Code
global $R,$C;
    $arr = array(array( 1, 2, 3, 4 ),
                 array( 5, 6, 7, 8 ),
                 array( 9, 10, 11, 12 ),
                 array( 13, 14, 15, 16 ));
echo counterClockspiralPrint($R, $C, $arr);
 
// This code is contributed by anuj_67.
?>


Javascript




<script>
// Javascript implementation to print
// the counter clock wise
// spiral traversal of matrix
 
let R = 4;
let C = 4;
 
// function to print the
// required traversal
function counterClockspiralPrint(m, n, arr)
{
    let i, k = 0, l = 0;
 
    //  k - starting row index
    //    m - ending row index
    //    l - starting column index
    //    n - ending column index
    //    i - iterator
 
    // initialize the count
    let cnt = 0;
 
    // total number of
    // elements in matrix
    let total = m * n;
 
    while (k < m && l < n)
    {
        if (cnt == total)
            break;
 
        // Print the first column
        // from the remaining columns
        for (i = k; i < m; ++i)
        {
            document.write(arr[i][l] + " ");
            cnt++;
        }
        l++;
 
        if (cnt == total)
            break;
 
        // Print the last row from
        // the remaining rows
        for (i = l; i < n; ++i)
        {
            document.write(arr[m - 1][i] + " ");
            cnt++;
        }
        m--;
 
        if (cnt == total)
            break;
 
        // Print the last column
        // from the remaining columns
        if (k < m)
        {
            for (i = m - 1; i >= k; --i)
            {
                document.write(arr[i][n - 1] + " ");
                cnt++;
            }
            n--;
        }
 
        if (cnt == total)
            break;
 
        // Print the first row
        // from the remaining rows
        if (l < n)
        {
            for (i = n - 1; i >= l; --i)
            {
                document.write(arr[k][i] + " ");
                cnt++;
            }
            k++;
        }
    }
}
 
// Driver Code
    let arr = [[ 1, 2, 3, 4 ],
                     [ 5, 6, 7, 8 ],
                     [ 9, 10, 11, 12 ],
                     [ 13, 14, 15, 16 ]];
    counterClockspiralPrint(R, C, arr);
 
// This code is contributed by rishavmahato348.
</script>


Output : 
 

1 5 9 13 14 15 16 12 8 4 3 2 6 10 11 7  

Time Complexity : O(mn).

Auxiliary Space: O(1) because constant space has been used

Alternate Implementation : 
 

C++




// C++ implementation to print
// the counter clock wise
// spiral traversal of matrix
#include <bits/stdc++.h>
using namespace std;
 
#define R 4
#define C 4
 
// function to print the
// required traversal
void counterClockspiralPrint(int Matrix[R][C])
{
    int size = R;
    int i = size, k = 0, flag = 0, j = 0;
 
    // Print all layers one by one
    while (i > 0) {
 
        // Print First Column of Current Layer
        for (j = flag; j < i; j++) {
            cout << Matrix[j][k] << " ";
        }
        i = i - 1;
        j = j - 1;
        k = j;
 
        // Print bottom row and last column
        // of current layer
        if (i > 0) {
            for (j = size - i; j < i + 1; j++)
                cout << Matrix[k][j] << " ";
            for (j = k - 1; j > size - i - 2; j--)
                cout << Matrix[j][k] << " ";
        }
        else
            break;
        j = j + 1;
        k = j;
        i = i - 1;
 
        // Print top row of current layer
        if (i > 0) {
            for (j = i; j > size - i - 2; j--)
                cout << Matrix[k][j] << " ";
            k = k + 1;
            i = i + 1;
            flag = flag + 1;
        }
        else
            break;
    }
}
 
// Driver Code
int main()
{
    int Matrix[R][C] = { { 1, 2, 3, 4 },
                         { 5, 6, 7, 8 },
                         { 9, 10, 11, 12 },
                         { 13, 14, 15, 16 } };
    counterClockspiralPrint(Matrix);
    return 0;
}
 
// This code is contributed by Aarti_Rathi


Java




// Java implementation to print
// the counter clock wise
// spiral traversal of matrix
import java.io.*;
 
class GFG
{
    static int R = 4;
    static int C = 4;
 
    // function to print the
    // required traversal
    static void counterClockspiralPrint(int Matrix[][])
    {
        int size = R;
        int i = size, k = 0, flag = 0, j = 0;
      
        // Print all layers one by one
        while (i > 0) {
      
            // Print First Column of Current Layer
            for (j = flag; j < i; j++) {
                System.out.print(Matrix[j][k]+" ");
            }
            i = i - 1;
            j = j - 1;
            k = j;
      
            // Print bottom row and last column
            // of current layer
            if (i > 0) {
                for (j = size - i; j < i + 1; j++)
                    System.out.print(Matrix[k][j]+" ");
                for (j = k - 1; j > size - i - 2; j--)
                    System.out.print(Matrix[j][k]+" ");
            }
            else
                break;
            j = j + 1;
            k = j;
            i = i - 1;
      
            // Print top row of current layer
            if (i > 0) {
                for (j = i; j > size - i - 2; j--)
                    System.out.print(Matrix[k][j]+" ");
                k = k + 1;
                i = i + 1;
                flag = flag + 1;
            }
            else
                break;
        }
    }
     
    // Driver Code
    public static void main(String[] args)
    {
        int Matrix[][] = { { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 },
                        { 9, 10, 11, 12 },
                        { 13, 14, 15, 16 } };
         
        // Function calling           
        counterClockspiralPrint(Matrix);
    }
}
 
// This code is contributed by shruti456rawal


Python




# Python3 implementation to print
# the counter clock wise
# spiral traversal of matrix
  
#function to print Matrix in CounterClockwise
def counterClockspiralPrint(Matrix):
    size = len(Matrix)
    flag = 0
    k, i = 0, size
 
    # Print all layers one by one
    while(i > 0):
 
        # Print First Column of Current Layer
        for j in range(flag,i):
            print(Matrix[j][k], end = ' ')
        i = i - 1
        k = j
 
        # Print bottom row and last column
        # of current layer
        if (i > 0):
            for j in range(size - i,i + 1):
                print(Matrix[k][j], end = ' ')
            for j in range(k-1,size-i-2,-1):
                print(Matrix[j][k], end = ' ')
        else: break
        k = j
        i = i-1
 
        # Print top row of current layer  
        if (i > 0):
            for j in range(i,size - i-2,-1):
                print(Matrix[k][j], end = ' ')
            k,i = k+1,i+1
            flag = flag + 1
        else: break
      
# Driver code
arr = [ [ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ],
        [ 9, 10, 11, 12 ],
        [ 13, 14, 15, 16 ] ]
  
counterClockspiralPrint(arr)
  
# This code is contributed by Srihari R


C#




// C# implementation to print
// the counter clock wise
// spiral traversal of matrix
using System;
using System.Collections.Generic;
 
class GFG
{
  static int R = 4;
  static int C = 4;
 
  // function to print the
  // required traversal
  static void counterClockspiralPrint(int[,] Matrix)
  {
    int size = R;
    int i = size, k = 0, flag = 0, j = 0;
 
    // Print all layers one by one
    while (i > 0) {
 
      // Print First Column of Current Layer
      for (j = flag; j < i; j++) {
        Console.Write(Matrix[j, k]+" ");
      }
      i = i - 1;
      j = j - 1;
      k = j;
 
      // Print bottom row and last column
      // of current layer
      if (i > 0) {
        for (j = size - i; j < i + 1; j++)
          Console.Write(Matrix[k, j]+" ");
        for (j = k - 1; j > size - i - 2; j--)
          Console.Write(Matrix[j, k]+" ");
      }
      else
        break;
      j = j + 1;
      k = j;
      i = i - 1;
 
      // Print top row of current layer
      if (i > 0) {
        for (j = i; j > size - i - 2; j--)
          Console.Write(Matrix[k, j]+" ");
        k = k + 1;
        i = i + 1;
        flag = flag + 1;
      }
      else
        break;
    }
  }
 
  // Driver Code
  public static void Main(string[] args)
  {
    int[,] Matrix = { { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 },
                     { 9, 10, 11, 12 },
                     { 13, 14, 15, 16 } };
 
    // Function calling           
    counterClockspiralPrint(Matrix);
  }
}
 
// This code is contributed by phasing17


Javascript




<script>
 
// JavaScript implementation to print
// the counter clock wise
// spiral traversal of matrix
 
 
const R = 4
const C = 4
 
// function to print the
// required traversal
function counterClockspiralPrint(Matrix)
{
    let size = R;
    let i = size, k = 0, flag = 0, j = 0;
 
    // Print all layers one by one
    while (i > 0) {
 
        // Print First Column of Current Layer
        for (j = flag; j < i; j++) {
            document.write(Matrix[j][k] + " ");
        }
        i = i - 1;
        j = j - 1;
        k = j;
 
        // Print bottom row and last column
        // of current layer
        if (i > 0) {
            for (j = size - i; j < i + 1; j++)
                document.write(Matrix[k][j] + " ");
            for (j = k - 1; j > size - i - 2; j--)
                document.write(Matrix[j][k] + " ");
        }
        else
            break;
        j = j + 1;
        k = j;
        i = i - 1;
 
        // Print top row of current layer
        if (i > 0) {
            for (j = i; j > size - i - 2; j--)
                document.write(Matrix[k][j] + " ");
            k = k + 1;
            i = i + 1;
            flag = flag + 1;
        }
        else
            break;
    }
}
 
// Driver Code
 
let Matrix = [[1, 2, 3, 4 ],
              [5, 6, 7, 8 ],
              [9, 10, 11, 12 ],
              [13, 14, 15, 16 ] ];
counterClockspiralPrint(Matrix);
 
// This code is contributed by shinjanpatra
 
</script>


Output

1 5 9 13 14 15 16 12 8 4 3 2 6 10 11 7 

Time Complexity: O(n2)

Auxiliary Space: O(1), since no extra space has been taken.



Last Updated : 05 Dec, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads