C++ 中具有所有 1 的最大大小矩形二进制子矩阵
在本教程中,我们将讨论一个查找具有所有 1 的最大大小矩形二进制子矩阵的程序。
为此,我们将提供一个包含零和一维度的 2D 矩阵。我们的任务是找到仅包含一个的最大 2D 矩阵子集。
示例
#include <bits/stdc++.h> using namespace std; #define R 4 #define C 4 //finding the maximum area 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; } //returning area of largest required subset 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
广告