Open In App

Print a given matrix in counter-clock wise spiral form

Last Updated : 05 Dec, 2022
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
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.


Next Article
Article Tags :
Practice Tags :

Similar Reads