在C ++中最大大小为1的矩形二进制子矩阵
在本教程中,我们将讨论一个程序来查找全为1的最大大小的矩形二进制子矩阵。
为此,我们将提供包含零和一的2D矩阵。我们的任务是找到仅包含一个的最大2D矩阵子集。
示例
#include <bits/stdc++.h>using namespace std;
#define R 4
#define C 4
//找到最大面积
int maxHist(int row[]) {
stack<int> result;
int top_val;
int max_area = 0;
int area = 0;
int i = 0;
while (i < C) {
if (result.empty() || row[result.top()] <= row[i])
result.push(i++);
else {
top_val = row[result.top()];
result.pop();
area = top_val * i;
if (!result.empty())
area = top_val * (i - result.top() - 1);
max_area = max(area, max_area);
}
}
while (!result.empty()) {
top_val = row[result.top()];
result.pop();
area = top_val * i;
if (!result.empty())
area = top_val * (i - result.top() - 1);
max_area = max(area, max_area);
}
return max_area;
}
//最大所需子集的返回区域
int maxRectangle(int A[][C]) {
int result = maxHist(A[0]);
for (int i = 1; i < R; i++) {
for (int j = 0; j < C; j++)
if (A[i][j])
A[i][j] += A[i - 1][j];
result = max(result, maxHist(A[i]));
}
return result;
}
int main() {
int A[][C] = {
{ 0, 1, 1, 0 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 },{ 1, 1, 0, 0 },
};
cout << "Area of maximum rectangle is " <<
maxRectangle(A);
return 0;
}
输出结果
Area of maximum rectangle is 8
以上是 在C ++中最大大小为1的矩形二进制子矩阵 的全部内容, 来源链接: utcz.com/z/343544.html