using
System;
class
GFG
{
static
readonly
int
N = 3;
static
readonly
int
M = 3;
static
int
maxProductPath(
int
[,]arr)
{
int
[,]maxPath =
new
int
[N, M];
int
[,]minPath =
new
int
[N, M];
for
(
int
i = 0; i < N; i++)
{
for
(
int
j = 0; j < M; j++)
{
int
minVal =
int
.MaxValue;
int
maxVal =
int
.MinValue;
if
(i == 0 && j == 0)
{
maxVal = arr[i, j];
minVal = arr[i, j];
}
if
(i > 0)
{
int
tempMax = Math.Max(maxPath[i - 1,j] * arr[i,j],
minPath[i - 1,j] * arr[i,j]);
maxVal = Math.Max(maxVal, tempMax);
int
tempMin = Math.Min(maxPath[i - 1,j] * arr[i,j],
minPath[i - 1,j] * arr[i,j]);
minVal = Math.Min(minVal, tempMin);
}
if
(j > 0) {
int
tempMax = Math.Max(maxPath[i,j - 1] * arr[i,j],
minPath[i,j - 1] * arr[i,j]);
maxVal = Math.Max(maxVal, tempMax);
int
tempMin = Math.Min(maxPath[i,j - 1] * arr[i,j],
minPath[i,j - 1] * arr[i,j]);
minVal = Math.Min(minVal, tempMin);
}
maxPath[i, j] = maxVal;
minPath[i, j] = minVal;
}
}
return
maxPath[N - 1, M - 1];
}
public
static
void
Main(String[] args)
{
int
[,]arr = { { 1, -2, 3 },
{ 4, -5, 6 },
{ -7, -8, 9 } };
Console.Write(maxProductPath(arr) +
"\n"
);
}
}