public static int findMaximum(int[][] mat)
{
if(mat.length==0 || mat[0][0]==-1){ return -1; }
return findMaximum(mat,0,0);
}
public static int findMaximum(int[][] mat, int i ,int j)
{
if( i>=mat.length || j>=mat[0].length || j<0 || i<0 || mat[i][j]==-1) { return 0;}
int temp = mat[i][j];
mat[i][j] = -1;
int down = 0;int left = 0; int right = 0;
if( i%2==0)
{
right = temp + findMaximum(mat, i, j+1);
down = temp + findMaximum(mat, i + 1, j);
}
else
{
left = temp + findMaximum(mat, i , j-1);
down = temp + findMaximum(mat, i + 1, j);
}
mat[i][j] = temp;
return Math.max(down, Math.max(left, right));
}