using
System;
class
GFG {
public
static
int
longestPath(
int
[,] mat,
int
[] src,
int
[] dest)
{
int
[] max =
new
int
[1];
int
N = mat.GetLength(0);
int
M = mat.GetLength(1);
bool
[,] visited =
new
bool
[N, M];
dfs(mat, max, visited, 0, src[0], src[1], dest);
return
max[0] + 1;
}
public
static
void
dfs(
int
[,] mat,
int
[] max,
bool
[,] visited,
int
len,
int
i,
int
j,
int
[] dest)
{
if
(i < 0 || j < 0 || i == mat.GetLength(0)
|| j == mat.GetLength(1)|| visited[i, j])
return
;
if
(i == dest[0] && j == dest[1]) {
max[0] = Math.Max(max[0], len);
return
;
}
visited[i, j] =
true
;
dfs(mat, max, visited, len + 1, i, j - 1, dest);
dfs(mat, max, visited, len + 1, i + 1, j, dest);
dfs(mat, max, visited, len + 1, i - 1, j, dest);
dfs(mat, max, visited, len + 1, i, j + 1, dest);
visited[i, j] =
false
;
}
public
static
void
Main()
{
int
[,] mat = { { 5, 6, 7, 8 },
{ 4, 1, 0, 9 },
{ 3, 2, 11, 10 } };
int
[] src = { 1, 1 };
int
[] dest = { 2, 2 };
Console.Write(longestPath(mat, src, dest));
}
}