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

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

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

1 0 1 0 0
1 0 1 1 0
1 1 1 1 1
1 0 0 1 0

तब आउटपुट 4

. होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • उत्तर:=0, एन:=पंक्तियों की संख्या, सी:=पंक्तियों की संख्या

  • अगर n 0 है, तो वापस 0

  • क्रम का एक और मैट्रिक्स बनाएं (n x c)

  • मैं के लिए 0 से n - 1 की सीमा में

    • j के लिए 0 से c - 1 की सीमा में

      • m[i, j] :=मैट्रिक्स[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

  • उत्तर* उत्तर दें

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#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++ में एक वर्ग के एक परिचालित वृत्त का क्षेत्रफल

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

  1. सी++ में वर्ग के क्षेत्रफल के लिए कार्यक्रम

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

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

    NaN, Not a Number का संक्षिप्त रूप है। यह अपरिभाषित या गैर-प्रतिनिधित्व योग्य फ़्लोटिंग पॉइंट तत्वों को इंगित करता है। NaN का एक उदाहरण किसी ऋणात्मक संख्या का वर्गमूल या 0/0 का परिणाम है। उदाहरण #शामिल करें आउटपुट -5 का वर्गमूल:nan