题目描述(最大块):
给定一个元素为0或者1的方阵编写程序找到一个元素都为1的最大方阵。然后显示最大方阵的第一个元素的位置及该方阵的行数。
输入:
5
1 0 1 0 1
1 1 1 0 1
1 0 1 1 1
1 0 1 1 1
1 0 1 1 1
输出:
最大方阵位置:(2,2),矩阵长度:3
代码如下,简单易懂
package num;
import java.util.Scanner;
import java.util.Arrays;
public class maxjuzhen {
static int n;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int[][] zz = new int[100][100];
int[] ans = new int[3];
n=scan.nextInt();
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
zz[i][j]=scan.nextInt();
}
}
ans = findLargestBlock(zz);
System.out.print("最大矩阵位置:("+ans[1]+","+ans[2]+") ");
System.out.println("矩阵长度:"+ans[0]);
}
public static int[] findLargestBlock(int[][] m)
{
int maxn=1,x=0,y=0;
for(int i=1;i<n;i++)
{
for(int j=1;j<n;j++)
{
if(m[i][j]==1)
{
int mmin = Math.min(m[i - 1][j], m[i][j - 1]);
mmin = Math.min(m[i - 1][j - 1], mmin);//求出上 ,左,上左最小值
m[i][j] = mmin + 1;
if(maxn < m[i][j])
{
maxn = m[i][j];
x=i;y=j;//记录方阵右下位置
}
}
}
}
int[] ans = {maxn,x-maxn+1,y-maxn+1};//结果放在数组中
return ans;
}
}