समस्या विवरण
यहां हम देखेंगे कि मैट्रिक्स तत्वों को Z फॉर्म में कैसे प्रिंट किया जाए। यदि सरणी इस तरह है:
5 8 7 1 2 3 6 4 1 7 8 9 4 8 1 5
तो इसे इस तरह प्रिंट किया जाएगा: 5, 8, 7, 1, 6, 7, 4, 8, 1, 5
एल्गोरिदम
printMatrixZ(mat, n):
Begin
पहली पंक्ति प्रिंट करें
i := 1, j := n-2
while i < n and j >= 0:
print mat[i][j]
i := i + 1, j := j - 1
done
अंतिम पंक्ति प्रिंट करें
End
व्याख्या
Z पैटर्न में तीन भाग होते हैं:
- शीर्ष पंक्ति: पहली पंक्ति के सभी तत्व बाएं से दाएं
- विकर्ण: दूसरी पंक्ति के अंतिम-2 से दूसरी-अंतिम पंक्ति के दूसरे तत्व तक विकर्ण
- नीचे की पंक्ति: अंतिम पंक्ति के सभी तत्व बाएं से दाएं (पहला तत्व पहले से प्रिंटेड विकर्ण का हिस्सा है)
उदाहरण
#include <iostream>
#define MAX 4
using namespace std;
void printMatrixZ(int mat[][MAX], int n) {
// 1. पहली पंक्ति प्रिंट करें
for(int i = 0; i < n; i++) {
cout << mat[0][i] << " ";
}
// 2. विकर्ण प्रिंट करें (ऊपर-दाएं से नीचे-बाएं)
int i = 1, j = n - 2;
while(i < n && j >= 0) {
cout << mat[i][j] << " ";
i++;
j--;
}
// 3. अंतिम पंक्ति प्रिंट करें (पहला तत्व छोड़कर जो विकर्ण का हिस्सा है)
for(int i = 1; i < n; i++) {
cout << mat[n-1][i] << " ";
}
}
int main() {
int matrix[][MAX] = {
{5, 8, 7, 1},
{2, 3, 6, 4},
{1, 7, 8, 9},
{4, 8, 1, 5}
};
printMatrixZ(matrix, 4);
return 0;
}
आउटपुट
5 8 7 1 6 7 4 8 1 5
चरण-दर-चरण ट्रेस
| चरण | तत्व | मान |
|---|---|---|
| शीर्ष पंक्ति | mat[0][0..3] | 5, 8, 7, 1 |
| विकर्ण | mat[1][2] | 6 |
| विकर्ण | mat[2][1] | 7 |
| नीचे की पंक्ति | mat[3][1..3] | 8, 1, 5 |
समय जटिलता
O(n) - प्रत्येक तत्व को अधिकतम एक बार विजिट किया जाता है
स्थान जटिलता
O(1) - केवल कुछ वेरिएबल्स
सामान्यीकरण
यह एल्गोरिदम N×N वर्ग मैट्रिक्स के लिए काम करता है। गैर-वर्ग मैट्रिक्स के लिए, तर्क को तदनुसार समायोजित करें।