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

C++ में 2-पंक्ति बाइनरी मैट्रिक्स का पुनर्निर्माण करें

मान लीजिए कि हमारे पास n कॉलम और 2 पंक्तियों वाले मैट्रिक्स का निम्नलिखित विवरण है -

  • मैट्रिक्स तत्व या तो 0 या 1 होंगे
  • 0-वें (ऊपरी) पंक्ति के तत्वों का योग ऊपरी के रूप में दिया गया है।
  • पहली (निचली) पंक्ति के तत्वों का योग नीचे दिया गया है।
  • i-वें स्तंभ (0-अनुक्रमित) में तत्वों का योग colsum[i] है, जहां कोलसम को लंबाई n के साथ एक पूर्णांक सरणी के रूप में दिया जाता है।

कार्य मैट्रिक्स को ऊपरी, निचले और कोलसम के साथ पुनर्निर्माण करना है। हमें इसे 2D पूर्णांक सरणी के रूप में खोजना होगा। यदि एक से अधिक वैध समाधान हैं, तो उनमें से कोई भी स्वीकार किया जाएगा। यदि कोई मान्य समाधान नहीं है, तो एक खाली 2D सरणी लौटाएं। इसलिए यदि इनपुट अपर =2, निचला =3 और कोलसम [1,1,1] जैसा है, तो आउटपुट [[1,1,0],[0,0,1]]

होगा।

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

  • झंडा सेट करें:=सच, n:=c का आकार, क्रम 2 * n के अनुसार एक सरणी बनाएं
  • मैं के लिए 0 से n की सीमा में
    • अगर c[i] =2, तो
      • यू और एल को 1 से घटाएं
      • यदि आप <0 या l <0 हैं, तो ध्वजांकित करें:=असत्य
      • उत्तर दें[0, i] =1 और ans[1, i] =1
    • अन्यथा यदि c[i] =1, तो
      • यदि आप> l, तो u को 1 से घटाएं, ans[0, i] :=1
      • अन्यथा जब आप
      • अन्यथा जब c[i] =1
      • यदि u> 0 है, तो u को 1 से घटाएं और ans[0, i] :=1
      • अन्यथा l> 0, फिर l को 1 से घटाएं और ans[1, i] :=1
      • अन्यथा ध्वज सेट करें:=झूठा
    • अन्यथा c[i] =0
      • अगर c[i]> 0, तो फ़्लैग सेट करें :=false
    • अन्यथा ध्वज सेट करें:=झूठा
  • यदि ध्वज गलत है या आप 0 नहीं है या l 0 नहीं है, तो खाली लौटें
  • वापसी उत्तर

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<vector<int>> reconstructMatrix(int u, int l, vector<int>& c) {
      bool flag = true;
      int n = c.size();
      vector < vector <int> > ans(2, vector <int> (n));
      for(int i = 0; i < n; i++){
         if(c[i] == 2){
            u--;
            l--;
            if(u<0 || l<0)flag = false;
            ans[0][i] = 1;
            ans[1][i] = 1;
         }else if(c[i] == 1){
            if(u>l){
                  u--;
                  ans[0][i] = 1;
            }else if(u<l){
               l--;
               ans[1][i] = 1;
            }else{
               if(u>0){
                  u--;
                  ans[0][i] = 1;
               }else if(l > 0){
                  l--;
                  ans[1][i] = 1;
               }else
                  flag = false;
            }  
         }else if(c[i] == 0){
         if(c[i]>0)flag = false;
         }else{
            flag = false;
         }
      }
      if(!flag || u!=0 ||l!=0 )return {};
      return ans;
   }
};
main(){
   vector<int> v = {1,1,1};
   Solution ob;
   print_vector(ob.reconstructMatrix(2,1,v));
}

इनपुट

2
1
[1,1,1]

आउटपुट

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

  1. C++ में बाइनरी मैट्रिक्स को ज़ीरो मैट्रिक्स में बदलने के लिए फ़्लिप की न्यूनतम संख्या

    मान लीजिए हमारे पास एक m x n बाइनरी मैट्रिक्स मैट है। एक चरण में, हम एक सेल चुन सकते हैं और उसके बिट को फ्लिप कर सकते हैं और यदि वे मौजूद हैं तो उसके चारों पड़ोसी। हमें मैट को शून्य मैट्रिक्स में बदलने के लिए आवश्यक न्यूनतम चरणों की संख्या ज्ञात करनी होगी। अगर कोई समाधान नहीं है, तो -1 लौटें। इसलिए

  1. C++ में बाइनरी ट्री प्रिंट करें

    मान लीजिए कि हमें इन नियमों के आधार पर m*n 2D स्ट्रिंग सरणी में एक बाइनरी ट्री प्रदर्शित करना है - पंक्ति संख्या m दिए गए बाइनरी ट्री की ऊंचाई के समान होनी चाहिए। कॉलम संख्या n हमेशा एक विषम संख्या होनी चाहिए। रूट नोड का मान पहली पंक्ति के ठीक बीच में रखा जाना चाहिए जिसे इसे रखा जा सकता है। स्तंभ औ

  1. C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए कि हमारे पास एक बाइनरी ट्री का हेड नोड रूट है, जहां अतिरिक्त रूप से प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री ढूंढना है जहां प्रत्येक सबट्री जिसमें 1 नहीं है, को हटा दिया गया है। तो अगर पेड़ जैसा है - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक पुनरावर्ती विधि को