SHUOJ农场的边长

SHUOJ农场的边长

描述

飞哥最近 得到 了一大块 n*m 的土地 ,他想在这块土地 上建一个正方 形的农场 ,但是 这块土 地有些地方 被大石头 占着,无法 使用 ,于是 飞哥想来问你 在这块土地 上能建成的农场 的最大 边 长为多少 ?

输入

第一个数T表示数组组数
每组 数据 一开 始有两个 整数 n和 m,表示 土地 的长和宽。
接下 来是个 n*m 的矩阵元素只有0和1,0表示 这块地方被石头占着,1表示可以使用。
m,n<=1000

输出

对每组数据输出一行,表示农场最大的边长。
样例输入
4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1
样例输出
2

我的想法

这是在矩阵里找一个最大的正方形,相关的博客有很多。然而对于咸鱼的我来说还是太难理解了,有些很棒的代码没有思路和注释,对我来说又是一个巨大的挑战(可能我只能展望试读警告了吧orz)。跪求大佬能指点一下我。当然看过感觉有用的资料还是要贴出来
[LeetCode01矩阵]http://blog.csdn.net/jiyanfeng1/article/details/47269465

AC代码

#include<stdio.h>
int matrix[1000][1000];
int main()
{
    int t=0,i=0;
    scanf("%d",&t);
    for(i=0;i<t;i++)
    {
        int n,m,j,k;
        scanf("%d %d",&n,&m);
        for(j=0;j<n;j++)
            for(k=0;k<m;k++)
            scanf("%d",&matrix[j][k]);
        k=large(n,m);
    }
    return 0;
}

int large(int n,int m)
{
    int max=1;
    int i,j;
    for(i = 1; i < n; i++)
        for(j = 1; j < m; j++)
            if(matrix[i][j] == 1)
            {
                int mmin = min(matrix[i - 1][j], matrix[i][j - 1]);
                mmin = min(matrix[i - 1][j - 1], mmin);
                matrix[i][j] = mmin + 1;
                if(max < matrix[i][j])
                    max = matrix[i][j];
            }
    printf("%d\n",max);
    return max;
}

int min(int a,int b)
{
    return a < b ? a : b;
}

猜你喜欢

转载自blog.csdn.net/waveviewer/article/details/75579006