একটি ম্যাট্রিক্স mat[row][col] দেওয়া থাকলে, সেটিকে জিগ-জ্যাগ ফ্যাশনে প্রিন্ট করতে হবে। নিচের চিত্রের মতো:

আউটপুট হবে:
Output: 10 20 40 70 50 30 60 80 90
এই সমস্যার সমাধানের জন্য ম্যাট্রিক্সকে ডায়াগোনালি ট্রাভার্স করতে হয় এবং প্রতিটি ডায়াগোনালের পর দিক পরিবর্তন করতে হয়।
অ্যালগরিদম
START
STEP 1: DECLARE AND SET k = 3, l = 3
STEP 2: DECLARE MATRIX mat[][3]
STEP 3: DECLARE AND SET row = 0, col = 0, flag = false
STEP 4: SET mn = MINIMUM(k, l)
STEP 5: LOOP FOR len = 1 TO mn
LOOP FOR i = 0 TO len-1
PRINT mat[row][col]
IF i+1 == len BREAK
IF flag THEN row++, col-- ELSE row--, col++
END FOR
IF len == mn BREAK
IF flag THEN row++, flag = false ELSE col++, flag = true
END FOR
STEP 6: BOUNDARY HANDLING FOR REMAINING DIAGONALS
STEP 7: SET MAX = MAXIMUM(k, l) - 1
STEP 8: LOOP FOR DIAGONALS FROM MAX DOWN TO 1
... (similar logic for lower half)
STOP
সি প্রোগ্রাম
#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);
// Upper half diagonals
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;
}
// Transition to lower half
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;
// Lower half diagonals
for (diag = MAX; diag > 0; --diag) {
len = (diag > mn) ? mn : diag;
for (i = 0; i < len; ++i) {
printf("%d ", mat[row][col]);
if (i + 1 == len) break;
if (flag) ++row, --col;
else ++col, --row;
}
// Boundary handling
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