zoukankan      html  css  js  c++  java
  • 华为机考 给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长。其中n,m<=400;

    此问题主要是求一个数组的最大连续相同字符的正方形的问题,比如

    0 1 1 1 1 1

    0 1 1 1 1 1

    1 1 1 1 1 1

    0 0 0 0 0 0

    得出来得的是

    输出边长也就是3;

    具体思路:

    先从a[1][1]开始,循环至结尾,每一次都执行以下循环体:

    比较a[]i-1[j-1],a[i][j-1],a[i-1][j],选出最小的,然后加到a[i][j]里,判断全局变量的max是否小于a[i][j],如果是的话,赋值。

    代码如下:

    1. import java.util.Scanner;  
    2.   
    3. public class Main88 {  
    4.   
    5.     /* 
    6.      * 给你一个N*M的矩阵,每个位置的值是0或1, 求一个面积最大的子矩阵,这个矩阵必须是一个正方形, 
    7.      * 且里面只能由1构成,输出最大的正方形边长。其中n,m<=400; 
    8.      */  
    9.   
    10.     public static void main(String args[]) {  
    11.         Scanner sc = new Scanner(System.in);  
    12.         int m, n;  
    13.   
    14.         while (true) {  
    15.             m = sc.nextInt();  
    16.             n = sc.nextInt();  
    17.             int[][] a = new int[m][n];  
    18.             for (int i = 0; i < m; i++)  
    19.                 for (int j = 0; j < n; j++)  
    20.                     a[i][j] = sc.nextInt();  
    21.             // 通过cout函数求得最大边长  
    22.             int s = cout(a, m, n);  
    23.             System.out.println(s);  
    24.         }  
    25.   
    26.     }  
    27.   
    28.     // 求矩阵构成正方形最大边长的函数  
    29.     private static int cout(int[][] a, int m, int n) {  
    30.         // TODO Auto-generated method stub  
    31.         int max = -1;  
    32.         for (int i = 1; i < m; i++)  
    33.             for (int j = 1; j < n; j++) {  
    34.                 if (a[i][j] == 1) {  
    35.                     int min = a[i - 1][j - 1];  
    36.                     if (a[i - 1][j] < min)  
    37.                         min = a[i - 1][j];  
    38.                     if (a[i][j - 1] < min)  
    39.                         min = a[i][j - 1];  
    40.                     a[i][j] += min;  
    41.                     if (max < a[i][j])  
    42.                         max = a[i][j];  
    43.                 }  
    44.   
    45.             }  
    46.         return max;  
    47.     }  
    48. }  

     

  • 相关阅读:
    Final-阶段站立会议5
    Debug阶段成员贡献分
    每周例行报告——第九周
    beta发布简评
    简易四则运算生成程序——批量出题
    每周例行报告——第八周
    每周例行报告——第七周
    每周例行报告——第六周
    课堂作业:alpha发布点评
    “四则运算生成程序——GUI支持和部分功能改进”链接
  • 原文地址:https://www.cnblogs.com/wwjldm/p/7112025.html
Copyright © 2011-2022 走看看