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;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章