কম্পিউটার টিউটোরিয়াল

সর্বোচ্চ বর্গাকার খুঁজে বের করা C++-এ


ধরা যাক একটি 2D বাইনারি ম্যাট্রিক্স আছে যা 0 এবং 1 দিয়ে ভরা। আমরা শুধু 1 ধারণকারী সর্বোচ্চ বর্গাকার বের করব এবং এর এরিয়া রিটার্ন করব। যদি ম্যাট্রিক্স নিচের মতো হয় −

10100
10110
11111
10010

তবে আউটপুট হবে 4

সমাধানের ধাপগুলো −

  • ans := 0, n := সারি সংখ্যা, c := কলাম সংখ্যা

  • যদি n 0 হয়, তবে 0 রিটার্ন করব

  • (n x c) আকারের অন্য একটি ম্যাট্রিক্স তৈরি করব

  • i = 0 থেকে n-1 পর্যন্ত

    • j = 0 থেকে c-1 পর্যন্ত

      • m[i, j] := matrix[i, j]

      • ans := m[i, j] এবং ans-এর ম্যাক্সিমাম

  • j = 0 থেকে c-1 পর্যন্ত

    • যদি m[i, j] 0 নয়, তবে

      • m[i, j] := 1 + m[i+1, j], m[i, j-1], m[i+1, j-1]-এর মিনিমাম

    • ans := m[i, j] এবং ans-এর ম্যাক্সিমাম

  • ans*ans রিটার্ন করব

নিচের ইমপ্লিমেন্টেশন দেখুন −

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int maximalSquare(vector<vector<char>>& matrix) {       int ans = 0;       int n = matrix.size();       if(!n)return 0;       int c = matrix[0].size();       vector<vector<int>> m(n, vector <int> (c));       for(int i =0;i<n;i++){          for(int j = 0; j<c;j++){             m[i][j] = matrix[i][j] - '0';             ans = max(m[i][j],ans);          }       }       for(int i =n-2;i>=0;i--){          for(int j =1;j<c;j++){             if(m[i][j]){                m[i][j] = 1 + min({m[i+1][j],m[i][j-1],m[i+1][j-1]});             }             ans = max(ans,m[i][j]);          }       }       return ans*ans;    } }; main(){    vector<vector<char>> v = {{'1','0','1','0','0'},{'1','0','1','1','1'},{'1','1','1','1','1'},         {'1','0','0','1','0'}};    Solution ob;    cout << ((ob.maximalSquare(v))); }

ইনপুট

[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]

আউটপুট

4

  1. C++-এ বর্গের পরিবেষ্টিত বৃত্তের ক্ষেত্রফল

  2. C++ এডাম নম্বর (Adam Number)

  3. C++-এ বর্গক্ষেত্রের এলাকা বের করার প্রোগ্রাম

  4. সি++-এ NaN (Not a Number) কী?