Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में अधिकतम वर्ग


मान लीजिए हमारे पास 0 और 1 से भरा एक 2D बाइनरी मैट्रिक्स है। हमें केवल 1 वाले सबसे बड़े वर्ग का क्षेत्रफल ढूंढना है।

उदाहरण:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
आउटपुट: 4 (2x2 वर्ग)।

डायनामिक प्रोग्रामिंग

  1. dp[i][j] = (i,j) पर समाप्त होने वाले सभी-1 वर्ग की अधिकतम भुजा लंबाई।
  2. यदि matrix[i][j] == '1':
    • dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])।
  3. अन्यथा dp[i][j] = 0।
  4. अधिकतम dp[i][j] ट्रैक करें, उत्तर = maxSide^2।

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int n = matrix.size();
        if (!n) return 0;
        int m = matrix[0].size();
        vector<vector<int>> dp(n, vector<int>(m, 0));
        int maxSide = 0;
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] == '1') {
                    if (i == 0 || j == 0) dp[i][j] = 1;
                    else dp[i][j] = 1 + min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]});
                    maxSide = max(maxSide, dp[i][j]);
                }
            }
        }
        return maxSide * maxSide;
    }
};

int 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); // 4
    return 0;
}

इनपुट

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

आउटपुट

4
  1. C++ में वर्ग के परिवृत्त का क्षेत्रफल C++ में वर्ग के परिवृत्त का क्षेत्रफल

    इस समस्या में, हम वर्ग के परिवृत्त का क्षेत्रफल गणना करेंगे जब हमें वर्ग की भुजा दी गई हो। आगे बढ़ने से पहले आइए मूल परिभाषाओं को दोहराते हैं ताकि अवधारणाओं को बेहतर ढंग से समझा जा सके। वर्ग समान भुजाओं वाला एक चतुर्भुज है। परिवृत्त एक वृत्त है जो बहुभुज के सभी शीर्षों को छूता है। क्षेत्रफल किसी भी

  1. C++ में वर्ग का क्षेत्रफल प्रोग्राम C++ में वर्ग का क्षेत्रफल प्रोग्राम

    हमें एक आयत की भुजा दी गई है और हमारा कार्य उस भुजा से वर्ग का क्षेत्रफल प्रिंट करना है।वर्ग एक 2-D प्लेन आकृति है जिसके 4 भुजाएं होती हैं और 90 डिग्री के 4 कोण बनते हैं और सभी भुजाएं समान आकार की होती हैं। दूसरे शब्दों में हम कह सकते हैं कि वर्ग समान भुजाओं वाला एक आयत का रूप है।नीचे वर्ग का प्रतिन

  1. - C++ में NaN क्या है?

    NaN (Not a Number) की परिभाषा NaN Not a Number का संक्षिप्त रूप है। यह अपरिभाषित या गैर-प्रतिनिधित्व योग्य फ्लोटिंग-पॉइंट एलिमेंट्स को इंगित करता है। NaN का एक उदाहरण किसी ऋणात्मक संख्या का वर्गमूल है, या 0/0 का परिणाम। उदाहरण #include <iostream> #include <cmath> using namespace std; i