एक मैट्रिक्स mat[row][col] दिया गया है, हमें दिए गए मैट्रिक्स को ज़िग-ज़ैग फैशन में प्रिंट करना है जैसे नीचे दिए गए चित्र में:

इसलिए आउटपुट इस तरह होना चाहिए:
Output: 10 20 40 70 50 30 60 80 90
उपरोक्त समस्या के लिए, हमने एक सरल दृष्टिकोण अपनाया है जहां हमें मैट्रिक्स को विकर्ण रूप से इटरेट करना है और प्रत्येक पिछले मैच के बाद दिशा बदलने के लिए इटरेशन के मान को बदलना है।
एल्गोरिदम
शुरुआत
चरण 1 → k = 3, l = 3 घोषित और सेट करें
चरण 2 → मैट्रिक्स mat[][3] घोषित करें
चरण 3 → row = 0, col = 0, flag = false घोषित और सेट करें
चरण 4 → mn = MINIMUM(k, l) सेट करें
चरण 5 → len = 1 से mn तक लूप ++len
i = 0 से len तक लूप ++i
mat[row][col] प्रिंट करें
यदि i + 1 == len तो, ब्रेक
यदि flag तो, row++ और col--
अन्यथा row-- और col++
लूप समाप्त
यदि len == mn तो, ब्रेक
यदि flag तो row++ और flag = FALSE
अन्यथा col++ और flag = TRUE
लूप समाप्त
चरण 6 → यदि row == 0 तो
यदि col == k-1 तो row++
अन्यथा col++
flag = 1
अन्यथा
यदि row == l-1 तो col++
अन्यथा row++
flag = 0
चरण 7 → MAX = MAXIMUM(k, l) - 1 सेट करें
चरण 8 → len, diag = MAX से diag > 0 तक --diag लूप
यदि diag > mn तो len = mn अन्यथा len = diag
i = 0 से len तक ++i लूप
mat[row][col] प्रिंट करें
यदि i + 1 == len तो ब्रेक
यदि flag तो ++row, --col अन्यथा ++col, --row
यदि row == 0 || col == k-1 तो
यदि col == k-1 तो ++row अन्यथा ++col
flag = true
अन्यथा यदि col == 0 || row == l-1 तो
यदि row == l-1 तो ++col अन्यथा ++row
flag = false
लूप समाप्त
समाप्त
उदाहरण
#include <stdio.h>
#include <stdbool.h>
#define C 3
#define min(a, b) a>b?b:a
#define max(a, b) a>b?a:b
int main(){
int k = 3, l = 3;
int mat[][3] = {
{ 10, 20, 30 },
{ 40, 50, 60 },
{ 70, 80, 90 }
};
int row = 0, col = 0;
bool flag = false;
int i, j, len, diag;
int MAX;
int mn = min(k, l);
for ( len = 1; len <= mn; ++len) {
for ( i = 0; i < len; ++i) {
printf("%d ", mat[row][col]);
if (i + 1 == len) break;
if (flag) ++row, --col;
else --row, ++col;
}
if (len == mn) break;
if (flag) ++row, flag = false;
else ++col, flag = true;
}
if (row == 0) {
if (col == k - 1) ++row;
else ++col;
flag = 1;
} else {
if (row == l - 1) ++col;
else ++row;
flag = 0;
}
MAX = max(k, l) - 1;
for ( len, diag = MAX; diag > 0; --diag) {
if (diag > mn) len = mn;
else len = diag;
for ( i = 0; i < len; ++i) {
printf("%d ", mat[row][col]);
if (i + 1 == len) break;
if (flag) ++row, --col;
else ++col, --row;
}
if (row == 0 || col == k - 1) {
if (col == k - 1) ++row;
else ++col;
flag = true;
} else if (col == 0 || row == l - 1) {
if (row == l - 1) ++col;
else ++row;
flag = false;
}
}
return 0;
}
आउटपुट
यह प्रोग्राम आउटपुट प्रिंट करेगा:
10 20 40 70 50 30 60 80 90