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

C++ में स्पाइरल मैट्रिक्स (Spiral Matrix)


मान लीजिए हमारे पास एक मैट्रिक्स है और हमें मैट्रिक्स के तत्वों को स्पाइरल (spiral) तरीके से प्रिंट करना है। पहले पहली पंक्ति से शुरू करके, पूरी सामग्री प्रिंट करें और फिर अंतिम कॉलम को प्रिंट करने के लिए फॉलो करें, फिर अंतिम पंक्ति, और इसी तरह, इस प्रकार यह तत्वों को स्पाइरल फैशन में प्रिंट करता है। यदि मैट्रिक्स इस तरह है:

123456
789101112
131415161718

तो आउटपुट इस तरह होगा: [1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16]

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

  • currRow := 0 और currCol := 0
  • जब तक currRow और currCol मैट्रिक्स रेंज में हैं:
    • i को currCol से n-1 तक की रेंज में:
      • mat[currRow, i] प्रदर्शित करें
    • currRow को 1 बढ़ाएं
    • i को currRow से m-1 तक की रेंज में:
      • mat[i, n-1] प्रदर्शित करें
    • n को 1 घटाएं
    • यदि currRow < m, तो:
      • i := n-1 से currCol तक डाउन करें:
        • mat[m-1, i] प्रदर्शित करें
      • m को 1 घटाएं
    • यदि currCol < n, तो:
      • i := m-1 से currRow तक डाउन करें:
        • mat[i, currCol] प्रदर्शित करें
      • currCol को 1 बढ़ाएं

उदाहरण (C++)

#include <iostream>
#define ROW 3
#define COL 6
using namespace std;

int array[ROW][COL] = {{1, 2, 3, 4, 5, 6},
    {7, 8, 9, 10, 11, 12},
    {13, 14, 15, 16, 17, 18}};

void dispSpiral(int m, int n){
    int i, currRow = 0, currCol = 0;
    while (currRow < ROW && currCol < COL){
        for (i = currCol; i < n; i++){
            cout << array[currRow][i] << " ";
        }
        currRow++;
        for (i = currRow; i < m; ++i){
            cout << array[i][n-1] << " ";
        }
        n--;
        if (currRow < m){
            for (i = n-1; i >= currCol; --i){
                cout << array[m-1][i] << " ";
            }
            m--;
        }
        if (currCol < n){
            for (i = m-1; i >= currRow; --i){
                cout << array[i][currCol] << " ";
            }
            currCol++;
        }
    }
}

int main(){
    dispSpiral(ROW, COL);
}

इनपुट

[[1,2,3,4,5,6] [7,8,9,10,11,12] [13,14,15,16,17,18]]

आउटपुट

1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16
  1. C++ में मैट्रिक्स की पंक्ति-वार बनाम स्तंभ-वार ट्रैवर्सल C++ में मैट्रिक्स की पंक्ति-वार बनाम स्तंभ-वार ट्रैवर्सल

    एक मैट्रिक्स को दो तरीकों से ट्रैवर्स किया जा सकता है। पंक्ति-वार ट्रैवर्सल प्रत्येक पंक्ति को एक-एक करके पहले पंक्ति से शुरू करके अंतिम पंक्ति तक देखता है। पंक्ति में तत्व इंडेक्स 0 से अंतिम इंडेक्स तक लौटाए जाते हैं। स्तंभ-वार ट्रैवर्सल में, तत्वों को पहले स्तंभ से अंतिम स्तंभ तक क्रम में ट्रैवर्स

  1. C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III) C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III)

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

  1. C++ में दिए गए मैट्रिक्स को काउंटर-क्लॉकवाइज स्पाइरल फॉर्म में प्रिंट करना C++ में दिए गए मैट्रिक्स को काउंटर-क्लॉकवाइज स्पाइरल फॉर्म में प्रिंट करना

    इस समस्या में, हमें एक 2-डायमेंशनल मैट्रिक्स दिया गया है। और हमारा कार्य मैट्रिक्स के एलिमेंट्स को काउंटर-क्लॉकवाइज स्पाइरल फॉर्म में प्रिंट करना है। काउंटरक्लॉकवाइज स्पाइरल फॉर्म यह एक स्पाइरल ट्रैवर्सल है जो टॉप-लेफ्ट से शुरू होता है और फिर काउंटर-क्लॉकवाइज दिशा में पहले बॉटम-राइट-अप-लेफ्ट की ओर