package com.interview.dynamic;
/**
* http://www.geeksforgeeks.org/maximum-size-sub-matrix-with-all-1s-in-a-binary-matrix/
*/
public class MaximumSizeSubMatrix {
private int min(int a,int b, int c){
int l = Math.min(a, b);
return Math.min(l, c);
}
public int maxSize(int arr[][]){
int result[][] = new int[arr.length][arr[0].length];
int max = 0;
for(int i=0; i < arr.length; i++){
result[i][0] = arr[i][0];
if (result[i][0] == 1)
{
max = 1;
}
}
for(int i=0; i < arr[0].length; i++){
result[0][i] = arr[0][i];
if (result[0][i] == 1)
{
max = 1;
}
}
for(int i=1; i < arr.length; i++){
for(int j=1; j < arr[i].length; j++){
if(arr[i][j] == 0){
continue;
}
int t = min(result[i-1][j],result[i-1][j-1],result[i][j-1]);
result[i][j] = t +1;
if(result[i][j] > max){
max = result[i][j];
}
}
}
return max;
}
public static void main(String args[]){
int arr[][] = {{0,1,1,0,1},{1,1,1,0,0},{1,1,1,1,0},{1,1,1,0,1}};
MaximumSizeSubMatrix mssm = new MaximumSizeSubMatrix();
int result = mssm.maxSize(arr);
System.out.print(result);
}
}