Print n x n spiral matrix using O(1) extra space - GeeksforGeeks
Given a number n, print a n x n spiral matrix (of numbers from 1 to n x n) in clockwise direction using O(1) space.
Given a number n, print a n x n spiral matrix (of numbers from 1 to n x n) in clockwise direction using O(1) space.
The solution becomes simple if extra space is allowed. We allocate memory for n x n matrix and for every element starting from n*n to 1, we start filling out matrix in spiral order. To maintain the spiral order four loops are used, each for top, right, bottom and left corner of the matrix.
void
printSpiral(
int
n)
{
for
(
int
i = 0; i < n; i++)
{
for
(
int
j = 0; j < n; j++)
{
// x stores the layer in which (i, j)th
// element lies
int
x;
// Finds minimum of four inputs
x = min(min(i, j), min(n-1-i, n-1-j));
// For upper right half
if
(i <= j)
printf
(
"%2d "
, (n-2*x)*(n-2*x) - (i-x)
- (j-x));
// for lower left half
else
printf
(
"%2d "
, (n-2*x-2)*(n-2*x-2) + (i-x)
+ (j-x));
}
printf
(
"\n"
);
}
}
For a given number n, print a n x n spiral matrix in counter clockwise direction using O(1) space.
Read full article from Print n x n spiral matrix using O(1) extra space - GeeksforGeeks