public static void Main()
var result = GetMaxSubMatrixSize(matrix);
Console.WriteLine("Result: " + result);
private static int GetMaxSubMatrixSize(int [,] matrix)
var lengthI = matrix.GetLength(0);
var lengthJ = matrix.GetLength(1);
for(var i = 0; i < lengthI; i++)
for(var j = 0; j < lengthJ; j++)
GetMaxSubMatrixSizeRecursive(matrix, i, j, 1, lengthI, lengthJ, ref maxSize);
private static void GetMaxSubMatrixSizeRecursive(int[,] matrix, int startI, int startJ, int currentSize, int lengthI, int lengthJ, ref int maxSize)
if(startI + currentSize == lengthI)
if(startJ + currentSize == lengthJ)
for(var i = startI; i < currentSize; i++)
if(matrix[i, startJ + currentSize] != 1)
for(var j = startJ; j < currentSize; j++)
if(matrix[startI + currentSize, j] != 1)
if(maxSize < currentSize)
GetMaxSubMatrixSizeRecursive(matrix, startI, startJ, currentSize, lengthI, lengthJ, ref maxSize);