কম্পিউটার

সর্বাধিক সাব-ম্যাট্রিক্স ক্ষেত্র যেখানে C++ এ 0 এর গণনার চেয়ে 1 এর একটি বেশি রয়েছে


এই টিউটোরিয়ালে, আমরা সর্বাধিক সাব-ম্যাট্রিক্স এলাকা খুঁজে বের করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব যেখানে 0 এর গণনার চেয়ে 1 এর একটি বেশি হবে।

এর জন্য আমাদেরকে 0 এবং 1 সহ একটি ম্যাট্রিক্স দেওয়া হবে। আমাদের কাজ হল সর্বাধিক ক্ষেত্রফলের সাব-ম্যাট্রিক্স পাওয়া যাতে 0’র চেয়ে বেশি 1’স থাকে

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
#define SIZE 10
//finding length of longest sub-matrix
int lenOfLongSubarr(int arr[],
int n, int& start, int& finish) {
   unordered_map<int, int> um;
   int sum = 0, maxLen = 0;
   for (int i = 0; i < n; i++) {
      sum += arr[i];
      if (sum == 1) {
         start = 0;
         finish = i;
         maxLen = i + 1;
      }
      else if (um.find(sum) == um.end()) um[sum] = i;
      if (um.find(sum - 1) != um.end()) {
         if (maxLen < (i - um[sum - 1])) start = um[sum - 1] + 1;
         finish = i;
         maxLen = i - um[sum - 1];
      }
   }
   return maxLen;
}
//finding the maximum area
void largestSubmatrix(int mat[SIZE][SIZE], int n) {
   int finalLeft, finalRight, finalTop, finalBottom;
   int temp[n], maxArea = 0, len, start, finish;
   for (int left = 0; left < n; left++) {
      memset(temp, 0, sizeof(temp));
      for (int right = left; right < n; right++) {
         for (int i = 0; i < n; ++i)
         temp[i] += mat[i][right] == 0 ? -1 : 1;
         len = lenOfLongSubarr(temp, n, start, finish);
         if ((len != 0) && (maxArea < (finish - start + 1) * (right - left + 1))) {
            finalLeft = left;
            finalRight = right;
            finalTop = start;
            finalBottom = finish;
            maxArea = (finish - start + 1) * (right - left + 1);
         }
      }
   }
   cout << "(Top, Left): (" << finalTop << ", " << finalLeft << ")\n";
   cout << "(Bottom, Right): (" << finalBottom << ", " << finalRight << ")\n";
   cout << "Maximum area: " << maxArea;
}
int main() {
   int mat[SIZE][SIZE] = {
      { 1, 0, 0, 1 },
      { 0, 1, 1, 1 },
      { 1, 0, 0, 0 },
      { 0, 1, 0, 1 }
   };
   int n = 4; largestSubmatrix(mat, n);
   return 0;
}

আউটপুট

(Top, Left): (1, 1)
(Bottom, Right): (3, 3)
Maximum area: 9

  1. C++ এ আয়তক্ষেত্র ক্ষেত্র II

  2. C++ এ সাজানো অ্যারেতে 25% এর বেশি উপাদান উপস্থিত হচ্ছে

  3. C++ এ চতুর্ভুজের সর্বোচ্চ ক্ষেত্রফল

  4. C++ এ সর্বাধিক সংলগ্ন জোড় সংখ্যার গণনা খুঁজুন