Print matrix in antispiral form
Last Updated :
16 Feb, 2023
Given a 2D array, the task is to print matrix in anti spiral form:
Examples:
Output: 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Input : arr[][4] = {1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
13, 14, 15, 16};
Output : 10 11 7 6 5 9 13 14 15 16 12 8 4 3 2 1
Input :arr[][6] = {1, 2, 3, 4, 5, 6
7, 8, 9, 10, 11, 12
13, 14, 15, 16, 17, 18};
Output : 11 10 9 8 7 13 14 15 16 17 18 12 6 5 4 3 2 1
The idea is simple, we traverse matrix in spiral form and put all traversed elements in a stack. Finally one by one elements from stack and print them.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
#define R 4
#define C 5
void antiSpiralTraversal( int m, int n, int a[R][C])
{
int i, k = 0, l = 0;
stack< int > stk;
while (k <= m && l <= n)
{
for (i = l; i <= n; ++i)
stk.push(a[k][i]);
k++;
for (i = k; i <= m; ++i)
stk.push(a[i][n]);
n--;
if ( k <= m)
{
for (i = n; i >= l; --i)
stk.push(a[m][i]);
m--;
}
if (l <= n)
{
for (i = m; i >= k; --i)
stk.push(a[i][l]);
l++;
}
}
while (!stk.empty())
{
cout << stk.top() << " " ;
stk.pop();
}
}
int main()
{
int mat[R][C] =
{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}
};
antiSpiralTraversal(R-1, C-1, mat);
return 0;
}
|
Java
import java.util.*;
class GFG {
public static void antiSpiralTraversal( int m, int n,
int a[][])
{
int i, k = 0 , l = 0 ;
Stack<Integer> stk= new Stack<Integer>();
while (k <= m && l <= n)
{
for (i = l; i <= n; ++i)
stk.push(a[k][i]);
k++;
for (i = k; i <= m; ++i)
stk.push(a[i][n]);
n--;
if ( k <= m)
{
for (i = n; i >= l; --i)
stk.push(a[m][i]);
m--;
}
if (l <= n)
{
for (i = m; i >= k; --i)
stk.push(a[i][l]);
l++;
}
}
while (!stk.empty())
{
System.out.print(stk.peek() + " " );
stk.pop();
}
}
public static void main(String[] args)
{
int mat[][] =
{
{ 1 , 2 , 3 , 4 , 5 },
{ 6 , 7 , 8 , 9 , 10 },
{ 11 , 12 , 13 , 14 , 15 },
{ 16 , 17 , 18 , 19 , 20 }
};
antiSpiralTraversal(mat.length - 1 , mat[ 0 ].length - 1 ,
mat);
}
}
|
Python 3
R = 4
C = 5
def antiSpiralTraversal(m, n, a):
k = 0
l = 0
stk = []
while (k < = m and l < = n):
for i in range (l, n + 1 ):
stk.append(a[k][i])
k + = 1
for i in range (k, m + 1 ):
stk.append(a[i][n])
n - = 1
if ( k < = m):
for i in range (n, l - 1 , - 1 ):
stk.append(a[m][i])
m - = 1
if (l < = n):
for i in range (m, k - 1 , - 1 ):
stk.append(a[i][l])
l + = 1
while len (stk) ! = 0 :
print ( str (stk[ - 1 ]), end = " " )
stk.pop()
mat = [[ 1 , 2 , 3 , 4 , 5 ],
[ 6 , 7 , 8 , 9 , 10 ],
[ 11 , 12 , 13 , 14 , 15 ],
[ 16 , 17 , 18 , 19 , 20 ]];
antiSpiralTraversal(R - 1 , C - 1 , mat)
|
C#
using System;
using System.Collections.Generic;
public class GFG
{
public static void antiSpiralTraversal( int m, int n, int [][] a)
{
int i, k = 0, l = 0;
Stack< int > stk = new Stack< int >();
while (k <= m && l <= n)
{
for (i = l; i <= n; ++i)
{
stk.Push(a[k][i]);
}
k++;
for (i = k; i <= m; ++i)
{
stk.Push(a[i][n]);
}
n--;
if (k <= m)
{
for (i = n; i >= l; --i)
{
stk.Push(a[m][i]);
}
m--;
}
if (l <= n)
{
for (i = m; i >= k; --i)
{
stk.Push(a[i][l]);
}
l++;
}
}
while (stk.Count > 0)
{
Console.Write(stk.Peek() + " " );
stk.Pop();
}
}
public static void Main( string [] args)
{
int [][] mat = new int [][]
{
new int [] {1, 2, 3, 4, 5},
new int [] {6, 7, 8, 9, 10},
new int [] {11, 12, 13, 14, 15},
new int [] {16, 17, 18, 19, 20}
};
antiSpiralTraversal(mat.Length - 1, mat[0].Length - 1, mat);
}
}
|
Javascript
<script>
function antiSpiralTraversal(m,n,a)
{
let i, k = 0, l = 0;
let stk=[];
while (k <= m && l <= n)
{
for (i = l; i <= n; ++i)
stk.push(a[k][i]);
k++;
for (i = k; i <= m; ++i)
stk.push(a[i][n]);
n--;
if ( k <= m)
{
for (i = n; i >= l; --i)
stk.push(a[m][i]);
m--;
}
if (l <= n)
{
for (i = m; i >= k; --i)
stk.push(a[i][l]);
l++;
}
}
while (stk.length!=0)
{
document.write(stk[stk.length-1] + " " );
stk.pop();
}
}
let mat = [[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]];
antiSpiralTraversal(mat.length - 1, mat[0].length - 1,
mat);
</script>
|
Output
12 13 14 9 8 7 6 11 16 17 18 19 20 15 10 5 4 3 2 1
Time complexity: O(R*C)
Auxiliary Space: O(R*C)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...