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

C++ में विकर्ण पारगमन


मान लीजिए हमारे पास M x N तत्वों की एक मैट्रिक्स है, हमें मैट्रिक्स के सभी तत्वों को विकर्ण क्रम में ढूंढना है। इसलिए यदि मैट्रिक्स इस तरह है:

123
456
789

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

हल का दृष्टिकोण

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • एक सरणी ret बनाएं, row := 0, col := 0, n := पंक्ति गिनती, m := स्तंभ गिनती, down := false सेट करें
  • i = 0 से n-1 तक:
    • x := i, y := 0
    • एक सरणी temp बनाएं
    • while x >= 0 और y < m:
      • matrix[x][y] को temp में डालें, और x को 1 से घटाएं और y को 1 से बढ़ाएं
    • यदि down true है, तो temp सरणी को उल्टा करें
    • i = 0 से temp का आकार - 1 तक, temp[i] को ret में डालें
    • down := down का उल्टा
  • i = 1 से m-1 तक:
    • x := n-1, y := i, एक सरणी temp बनाएं
    • while x >= 0 और y < m:
      • matrix[x][y] को temp में डालें और x को 1 से घटाएं और y को 1 से बढ़ाएं
    • i = 0 से temp का आकार - 1 तक, temp[i] को ret में डालें
    • down := down का उल्टा
  • ret लौटाएं।

उदाहरण

#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; 
    } 
}; 

int 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 C++ में डायगोनल ट्रैवर्स II

    मान लीजिए हमारे पास nums नामक लिस्ट ऑफ लिस्ट है, हमें nums के सभी एलिमेंट्स को डायगोनल क्रम में दिखाना है।इसलिए, यदि इनपुट हैतो आउटपुट होगा [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:एक ऐरे ret परिभाषित करेंएक 2D ऐरे v परिभाषित करेंi := 0 से शुरू करें,

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

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

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

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