在只有0和1的矩阵中找出边长最大的全1矩阵

来源:互联网 发布:如何让增加淘宝流量 编辑:程序博客网 时间:2024/04/28 09:25

在一个A*B的矩阵中,只包含0和1,从矩阵中找出边长最大的全1子矩阵。

输入行数和列数

输出最大边长。

#include <iostream>using namespace std;int x[400][400] = {0};int upperbound[400][400] = {0};int a(0),b = 0,temp(0);//更新为,本行中,x[i][j]的前面连续的1的个数+1;void pre(){    for (int i = 0;i<a;i++)    {        for (int j = 1;j<b;j++)        {            if (x[i][j] == 1&&x[i][j-1] !=0)            {                x[i][j] = x[i][j-1] +1;            }        }    }}//上下检索,大于本身,则cnt+1int serach_up_down(int row,int col){    int cnt = 1,val = x[row][col];    for (int i = row-1;i>=0;i--)    {        if (x[i][col] >=val)        {            cnt++;        }        else        {            break;        }    }    for (int i = row+1;i<a;i++)    {        if (x[i][col]>=val)        {            cnt++;        }        else        {            break;        }    }    if (val>cnt)    {        return cnt;    }    else    {        return val;    }}//循环遍历找出int getMax(){    int length = 0;    for (int i = 0 ;i<a;i++)    {        for (int j = 0;j<b;j++)        {            if (x[i][j] != 0)            {                int val = serach_up_down(i,j);                if (val>length)                {                    length = val;                }            }        }    }    return length;}int main(){            cout<<"请输入行数和列数"<<endl;    cin>>a>>b;    for (int i = 0;i<a;i++)    {        for (int j = 0;j<b;j++)        {            cin>>temp;            x[i][j] = temp;        }    }    pre();    //预处理    cout<<getMax()<<endl;}


0 0
原创粉丝点击