在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

回到顶部