題目描述(最大塊):
給定一個元素爲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;
}
}