您的位置:首页 > 编程语言 > C语言/C++

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

2014-09-25 21:14 120 查看
在一个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+1
int 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 全1矩阵
相关文章推荐