在一个二维01矩阵中找到全为1的最大正方形
样例
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
样例
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
返回 4
import java.util.Scanner;
/**
* 在一个二维01矩阵中找到全为1的最大正方形
样例
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
返回 4
* @author Dell
*
*/
public class Test436 {
public static int maxSquare(int[][] matrix)
{
if(matrix==null||matrix.length==0)
return 0;
int row=matrix.length;
int col=matrix[0].length;
int[][] dp=new int[row][col];
int result=0;
for(int i=0;i<row;i++)
{
if(matrix[i][0]==1)
{
dp[i][0]=1;
result=1;
}
}
for(int j=1;j<col;j++)
{
if(matrix[0][j]==1)
{
dp[0][j]=1;
result=1;
}
}
for(int i=1;i<row;i++)
{
for(int j=1;j<col;j++)
{
if(matrix[i][j]==1)
{
dp[i][j]=Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1]))+1;
result=Math.max(result, dp[i][j]);
}
}
}
return result*result;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
int[][] a=new int[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=sc.nextInt();
}
}
System.out.println(maxSquare(a));
}
}