using
System;
class
GFG{
static
bool
isValid(
int
i,
int
j,
int
N,
int
M)
{
return
(i >= 0 && i < N &&
j >= 0 && j < M);
}
static
int
[] up(
int
i,
int
j,
int
N,
int
M)
{
if
(isValid(i - 1, j + 1, N, M))
return
new
int
[]{ i - 1, j + 1 };
else
return
new
int
[]{ -1, -1 };
}
static
int
[] down(
int
i,
int
j,
int
N,
int
M)
{
if
(isValid(i + 1, j - 1, N, M))
return
new
int
[]{ i + 1, j - 1 };
else
return
new
int
[]{ -1, -1 };
}
static
void
SpiralDiagonal(
int
N,
int
M,
int
K,
int
[, ] a)
{
int
i = 0, j = 0;
for
(
int
diagonal = 0;
diagonal < N + M - 1;
diagonal++)
{
while
(
true
)
{
if
(a[i, j] == K)
{
Console.Write(K);
return
;
}
Console.Write(a[i, j] +
", "
);
int
[] next;
if
((diagonal & 1) == 1)
{
next = down(i, j, N, M);
}
else
{
next = up(i, j, N, M);
}
if
(next[0] == next[1] &&
next[1] == -1)
{
if
((diagonal & 1) == 1)
{
if
(i + 1 < N)
++i;
else
++j;
}
else
{
if
(j + 1 < M)
++j;
else
++i;
}
break
;
}
else
{
i = next[0];
j = next[1];
}
}
}
}
public
static
void
Main(
string
[] args)
{
int
N = 5, M = 6, K = 15;
int
[, ] arr = { { 1, 2, 3, 4, 5, 6 },
{ 7, 8, 9, 10, 11, 12 },
{ 13, 14, 15, 16, 17, 18 },
{ 19, 20, 21, 22, 23, 24 },
{ 25, 26, 27, 28, 29, 30 } };
SpiralDiagonal(N, M, K, arr);
}
}