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

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

इस समस्या में, हमें एक 2D मैट्रिक्स दिया गया है। हमारा काम मैट्रिक के सभी तत्वों को तिरछे क्रम में प्रिंट करना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

1    2    3
4    5    6
7    8    9

आउटपुट -

1
4    2
7    5    3
8    6
9

आइए देखते हैं कि मैट्रिक्स को ज़िगज़ैग रूप या विकर्ण रूप में प्रिंट करते समय किस पैटर्न का पालन किया जाता है।

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

इस तरह से विकर्ण ट्रैवर्सल काम करता है।

आउटपुट में लाइनों की संख्या हमेशा 2D मैट्रिक्स की पंक्ति और कॉलम पर निर्भर करती है।

2D मैट्रिक्स मैट[r][c] के लिए, उनकी r+c-1 आउटपुट लाइनें होंगी।

उदाहरण

अब, कार्यक्रम का समाधान देखते हैं,

#include <iostream>
using namespace std;
#define R 5
#define C 4
int min2(int a, int b)
{ return (a < b)? a: b; }
int min3(int a, int b, int c)
{ return min2(min2(a, b), c);}
int max(int a, int b)
{ return (a > b)? a: b; }
void printDiagonalMatrix(int matrix[][C]){
   for (int line=1; line<=(R + C -1); line++){
      int start_col = max(0, line-R);
      int count = min3(line, (C-start_col), R);
      for (int j=0; j<count; j++)
      cout<<matrix[min2(R, line)-j-1][start_col+j]<<"\t";
      cout<<endl;
   }
}
int main(){
   int M[R][C] = {{1, 2, 3, 4},
      {5, 6, 7, 8},
      {9, 10, 11, 12},
      {13, 14, 15, 16},
      {17, 18, 19, 20},};
   cout<<"The matrix is : \n";
   for (int i=0; i< R; i++){
      for (int j=0; j<C; j++)
      cout<<M[i][j]<<"\t";
      cout<<endl;
   }
   cout<<"\nZigZag (diagnoal) traversal of matrix is :\n";
   printDiagonalMatrix(M);
   return 0;
}

आउटपुट

The matrix is :
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
ZigZag (diagonal) traversal of matrix is :
1
5 2
9 6 3
13 10 7 4
17 14 11 8
18 15 12
19 16
20

  1. C++ . में ज़िगज़ैग ट्री ट्रैवर्सल

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम बाइनरी ट्री को ज़िगज़ैग रूप में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, उपरोक्त बाइनरी ट्री का ज़िगज़ैग ट्रैवर्सल है 3    5    1    8    7    0    4 इस समस्या

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

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

  1. C++ में idempotent मैट्रिक्स की जांच करने का कार्यक्रम

    एक मैट्रिक्स दिया गया है M[r][c], r पंक्तियों की संख्या को दर्शाता है और c कॉलम की संख्या को दर्शाता है जैसे कि r =c एक वर्ग मैट्रिक्स बनाता है। हमें यह जांचना है कि दिया गया वर्ग मैट्रिक्स एक बेकार मैट्रिक्स . है या नहीं या नहीं। बेकार मैट्रिक्स एक मैट्रिक्स M को बेवकूफ मैट्रिक्स . कहा जाता है य