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

C++ में मैट्रिक्स को फिर से आकार दें


विभिन्न प्लेटफॉर्म में 'रीशेप' नामक एक बहुत ही उपयोगी फ़ंक्शन है, उस फ़ंक्शन का उपयोग मैट्रिक्स को अलग-अलग आकार के साथ एक नए आकार में बदलने के लिए किया जाता है लेकिन डेटा समान होगा। इसलिए, यदि हमारे पास वांछित पुन:आकारित मैट्रिक्स की पंक्ति संख्या और स्तंभ संख्या के लिए क्रमशः एक मैट्रिक्स और दो मान r और c हैं।

इसलिए, यदि इनपुट [[5,10],[15,20]], पंक्ति =1 और कॉल =4 जैसा है, तो आउटपुट [[5, 10, 15, 20]]

होगा।

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

  • एक सरणी अस्थायी परिभाषित करें

  • आकार के एक 2D सरणी रेस को परिभाषित करें (r x c)

  • गिनती :=0

  • इनिशियलाइज़ i :=0 के लिए, जब i <अंकों का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -

    • इनिशियलाइज़ j :=0 के लिए, जब j <अंकों का आकार [0], अपडेट करें (1 से j बढ़ाएँ), करें -

      • अंक डालें [i, j] अस्थायी के अंत में

  • यदि r * c अंकों के आकार के बराबर नहीं है, तो -

    • वापसी संख्या

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • गिनती =गिनती + 1

      • रेस [i, j]:=अस्थायी [गिनती]

  • रिटर्न रेस

उदाहरण

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

#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>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
      vector<int> temp;
      vector<vector<int> > res(r, vector<int>(c));
      int count = 0;
      for (int i = 0; i < nums.size(); i++) {
         for (int j = 0; j < nums[0].size(); j++) {
            temp.push_back(nums[i][j]);
         }
      }
      if (r * c != nums.size() * nums[0].size())
         return nums;
      for (int i = 0; i < r; i++) {
         for (int j = 0; j < c; j++) {
            res[i][j] = temp[count++];
         }
      }
      return res;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v = {{5,10},{15,20}};
   print_vector(ob.matrixReshape(v, 1, 4));
}

इनपुट

{{5,10},{15,20}}, 1, 4

आउटपुट

[[5, 10, 15, 20, ],]

  1. C++ . में भूलभुलैया III

    मान लीजिए कि खाली जगह और दीवारों के साथ एक भूलभुलैया है और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (यू), नीचे (डी), बाएं (एल) या दाएं (आर) दिशाओं को लुढ़क कर खाली जगहों से जा सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। उस भूलभुलैया में एक छेद

  1. C++ . में मैट्रिक्स का ज़िगज़ैग (या विकर्ण) ट्रैवर्सल

    इस समस्या में, हमें एक 2D मैट्रिक्स दिया गया है। हमारा काम मैट्रिक के सभी तत्वों को तिरछे क्रम में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, 1    2    3 4    5    6 7    8    9 आउटपुट - 1 4    2 7    

  1. सी++ में सर्पिल मैट्रिक्स III

    मान लीजिए कि हमारे पास आर पंक्तियों और सी कॉलम के साथ एक 2 आयामी ग्रिड है, हम पूर्व की ओर (r0, c0) से शुरू करते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और ग्रिड का दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति का दौरा करने के लिए एक दक्षिणावर्त सर