您的位置:首页 > 其它

找出矩阵中的最大矩形

2015-09-20 19:35 274 查看
//找出矩阵中由 1 组成的最大的矩形,
#include "stdafx.h"
#include "iostream"

using namespace std;
int find_1(int **p, int nRow, int nCol);
int find_Rect(int **p, int x, int y, int nRow, int nCol);

int main()
{
int nRow = 0, nCol = 0;
cin >> nRow >> nCol;

int **p = new int*[nRow]();
for (int n0 = 0; n0 < nRow; ++n0)
p[n0] = new int[nCol]();

for (int n = 0; n < nRow; ++n)
for (int m = 0; m < nCol; ++m)
cin >> p
[m];

cout << find_1(p, nRow, nCol);

return 0;
}

int find_1(int **p,int nRow,int nCol) {
int max = 0;

for (int n = 0; n < nRow; ++n)
for (int m = 0; m < nCol; ++m)
if (p
[m] != 0) {
int tmp = 0;
tmp = find_Rect(p, n, m, nRow, nCol);
if (tmp) {
max = tmp > max ? tmp : max;
}
else continue;
}

return max;
}

int find_Rect(int **p, int x, int y, int nRow, int nCol) {
int length = 0;
for (int m0 = y; m0 < nCol; ++m0) {
if (p[x][m0] == 1)
length++;
else break;
}

for (int m = x; m < ((x + length)>nRow?nRow:(x+length)); ++m)
for (int n = y; n < ((y + length)>nCol?nCol:(y+length)); ++n)
if (p[m]
!= 1) {
int tmp = m > n ? m : n;
length = length > tmp ? tmp : length;
}
if (length>(nRow - x))length = (nRow - x);

return length;
}
方法可能比较笨拙,遍历过程可以优化,缩小遍历范围
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: