Java实验(5) 最大子方阵

来源:互联网 发布:excelplus电子表格mac 编辑:程序博客网 时间:2024/05/17 04:44

给定一个由0,1组成的n*n方阵(n在运行时提醒用户输入),判断其中由全1组成的最大子方阵的左上角位置和阶数。例如用户输入n为5,随机产生的方阵如下:


程序的输出为:最大子方阵位于(2,2),阶数3。

要求编写方法实现上述功能,返回值是一个包含3个元素的数组,依次表示行下标,列下标,阶数。

方法原型:public static int[] findLargestBlock(int[][] m)

                                             

package maxsubmatrix;import java.util.Scanner;public class MaxSubMatrix {    public static void main(String[] args) {        Scanner input=new Scanner(System.in);        System.out.println("请输入方阵维数n:");        int n=input.nextInt();        int [][] m=new int[n][n];        int []a=new int[3];        //产生一个n*n矩阵,元素为0或1并输出        for(int i=0;i<n;i++){            for(int j=0;j<n;j++){                m[i][j]=(int)(Math.random()*10)%2;                      System.out.print(m[i][j]+"\t");            }            System.out.print("\n");        }        a=findLargestBlock(m);        System.out.print("\n");        System.out.println("最大子方阵位于:("+a[0]+","+a[1]+")");        System.out.println("阶数:"+a[2]);    }    //找到最大的全为1的矩阵块    public  static int[] findLargestBlock(int [][] m){        boolean t=true;        int []a=new int[3];        int n=m.length;        int i=0,j=0,l=0;        for(l=n;l>=1;l--){ //矩阵维数,从最大开始            for(i=0;i<=n-l;i++){                for(j=0;j<=n-l;j++){                    t=true;                    for(int x=i;x<i+l;x++){                        for(int y=j;y<j+l;y++){                            if(m[x][y]!=1){    //不为1退出此轮循环                                t=false;                                break;                            }                        }                        if(t==false) break;                    }                    if(t==true) break;                }                if(t==true) break;            }            if(t==true) break;        }        a[0]=i;        a[1]=j;        a[2]=l;        return a;    } }



0 0
原创粉丝点击