java:求最大子方阵

题目描述(最大块):

给定一个元素为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;
	}
}

发布了46 篇原创文章 · 获赞 237 · 访问量 6092

猜你喜欢

转载自blog.csdn.net/weixin_43912621/article/details/104692667