找出矩阵中的最大矩形


//找出矩阵中由 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[n][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[n][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][n] != 1) {
				int tmp = m > n ? m : n;
				length = length > tmp ? tmp : length;
			}
	if (length>(nRow - x))length = (nRow - x);

	return length;
}

方法可能比较笨拙,遍历过程可以优化,缩小遍历范围

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值