using
System;
class
GFG {
static
bool
outOfBound(
int
i,
int
n)
{
if
(i < 0 || i >= n)
return
true
;
else
return
false
;
}
static
int
[, ] spiralFill(
int
[] arr,
int
m,
int
n)
{
int
[, ] mat =
new
int
[n, n];
for
(
int
a = 0; a < n; a++) {
for
(
int
b = 0; b < n; b++) {
mat[a, b] = 0;
}
}
int
dir = 0;
int
value = 0, end = arr.Length;
int
[, ] dirArr =
new
int
[4, 2];
dirArr[0, 0] = 0;
dirArr[0, 1] = 1;
dirArr[1, 0] = 1;
dirArr[1, 1] = 0;
dirArr[2, 0] = 0;
dirArr[2, 1] = -1;
dirArr[3, 0] = -1;
dirArr[3, 1] = 0;
int
i = 0, j = 0;
while
(value < end) {
mat[i, j] = arr[value];
value++;
if
(outOfBound(i + dirArr[dir, 0], m)
|| outOfBound(j + dirArr[dir, 1], n)
|| mat[i + dirArr[dir, 0],
j + dirArr[dir, 1]]
!= 0) {
dir = (dir + 1) % 4;
}
i = i + dirArr[dir, 0];
j = j + dirArr[dir, 1];
}
return
mat;
}
public
static
void
Main()
{
int
m = 3, n = 4;
int
[] arr = { 1, 8, 6, 3, 8, 6, 1, 6, 3, 2, 5, 3 };
int
[, ] mat = spiralFill(arr, m, n);
for
(
int
i = 0; i < m; i++) {
for
(
int
j = 0; j < n; j++) {
Console.Write(mat[i, j] +
" "
);
}
Console.WriteLine();
}
}
}