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

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


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

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]

जैसा होगा

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

  • currRow :=0 और currCol :=0

  • जबकि currRow और currCol मैट्रिक्स रेंज में हैं

    • मेरे लिए currCol और n-1 श्रेणी में,

      • प्रदर्शन चटाई[currRow, i]

    • 1

    • मेरे लिए currRow और m-1 श्रेणी में, करें

      • प्रदर्शन चटाई[i, n-1]

    • n को 1 से घटाएं

    • अगर currRow

      • for i :=n-1 डाउन टू currCol, do

        • प्रदर्शन चटाई[एम-1, आई]

      • मी को 1 से कम करें

      • अगर currCol

        • i के लिए :=m-1 डाउन टू currRow, करें

          • प्रदर्शन चटाई[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++){ //print the first row normally
      cout << array[currRow][i]<<" ";
   }
   currRow++; //point to next row
   for (i = currRow; i < m; ++i){ //Print the last column
      cout << array[i][n-1]<<" ";
   }
   n--; //set the n-1th column is current last column
   if ( currRow < m){ //when currRow is in the range, print the last row
      for (i = n-1; i >= currCol; --i){
         cout << array[m-1][i]<<" ";
      }
      m--; //decrease the row range
   }
   if (currCol < n){ //when currCol is in the range, print the fist column
      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++ में मैट्रिक्स की पंक्ति-वार बनाम स्तंभ-वार ट्रैवर्सल

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

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

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

  1. दिए गए मैट्रिक्स को C++ में वामावर्त सर्पिल रूप में प्रिंट करें

    इस समस्या में, हमें एक 2-आयामी मैट्रिक्स दिया गया है। और हमारा काम मैट्रिक्स के तत्वों को वामावर्त सर्पिल में से प्रिंट करना है। वामावर्त सर्पिल रूप - यह एक सर्पिल ट्रैवर्सल है जो ऊपर-बाएं से शुरू होता है और वामावर्त दिशा में पहले नीचे-दाएं-ऊपर-बाएं जाता है। वामावर्त ट्रैवर्सल 1 5 9 13 14 15 16