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

C++ . में विकर्ण ट्रैवर्स

मान लीजिए कि हमारे पास एम एक्स एन तत्वों का एक मैट्रिक्स है, हमें मैट्रिक्स के सभी तत्वों को विकर्ण क्रम में खोजना होगा। तो अगर मैट्रिक्स की तरह है -

1 2 3
4 5 6
7 8 9

आउटपुट होगा [1,2,4,7,5,3,6,8,9]

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

  • एक सरणी रिट बनाएं, पंक्ति सेट करें:=0 और कॉलम:=0, एन:=पंक्ति गणना, एम:=कॉल गिनती, नीचे:=झूठा
  • मैं के लिए 0 से n - 1 की सीमा में
    • x :=i, y :=0
    • एक सरणी अस्थायी बनाएं
    • जबकि x>=0 और y
    • मैट्रिक्स[x,y] को टेम्परेचर में डालें, और x को 1 से घटाएं और y को 1 से बढ़ाएं
  • यदि नीचे सही है, तो अस्थायी सरणी को उलट दें
  • मैं के लिए 0 से लेकर अस्थायी -1 के आकार तक के लिए, अस्थायी [i] को रिट में डालें
  • नीचे :=नीचे का उलटा
  • i के लिए 1 से m - 1 की सीमा में
    • x:=n – 1, y:=1, एक सरणी अस्थायी बनाएं
    • जबकि x>=0 और y
    • मैट्रिक्स[x, y] को टेम्परेचर में डालें और x को 1 से घटाएं और y को 1 से बढ़ाएं
  • मैं के लिए 0 से लेकर अस्थायी -1 के आकार तक के लिए, अस्थायी [i] को रिट में डालें
  • नीचे :=नीचे का उलटा
  • रिटर्न रिट।
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<int> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
       public:
       vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
          vector <int> ret;
          int row = 0;
          int col = 0;
          int n = matrix.size();
          int m = n? matrix[0].size() : 0;
          bool down = false;
          for(int i = 0; i < n; i++){
             int x = i;
             int y = 0;
             vector <int> temp;
             while(x >= 0 && y < m){
                temp.push_back(matrix[x][y]);
                x--;
                y++;
             }
             if(down) reverse(temp.begin(), temp.end());
             for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
             down = !down;
          }
          for(int i = 1; i < m; i++){
             int x = n - 1;
             int y = i;
             vector <int> temp;
             while(x >= 0 && y < m){
                temp.push_back(matrix[x][y]);
                x--;
                y++;
             }
             if(down) reverse(temp.begin(), temp.end());
             for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
             down = !down;
          }
          return ret;
       }
    };
    main(){
       vector<vector<int>> v = {{1,2,3},{4,5,6},{7,8,9}};
       Solution ob;
       print_vector(ob.findDiagonalOrder(v));
    }

    इनपुट

    [[1,2,3],[4,5,6],[7,8,9]]

    आउटपुट

    [1, 2, 4, 7, 5, 3, 6, 8, 9, ]

    1. C++ . में विकर्ण ट्रैवर्स II

      मान लीजिए कि हमारे पास nums नामक सूचियों की एक सूची है, हमें अंकों के सभी तत्वों को विकर्ण क्रम में दिखाना होगा। तो, अगर इनपुट पसंद है तो आउटपुट [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16] होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक सरणी रिट परिभाषित करें एक 2डी सरणी को परिभाषित

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

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

    1. ऊपरी विकर्ण को C++ में लोअर के साथ स्वैप करें

      यह ट्यूटोरियल c++ कोड का उपयोग करके तीन-विकर्ण सरणी की ऊपरी पंक्ति को इसके निचले हिस्से में स्वैप करने के लिए डिज़ाइन किया गया है। इसके अलावा, यदि एक तीन-विकर्ण सरणी एक इनपुट है, तो वांछित परिणाम कुछ इस तरह होना चाहिए; इसके लिए एल्गोरिथम में कार्रवाई की प्रक्रिया इस प्रकार बताई गई है; एल्गोरिदम S