একটি ম্যাট্রিক্স ম্যাট[সারি][কল] দেওয়া হলে আমাদের প্রদত্ত ম্যাট্রিক্সটিকে জিগ-জ্যাগ ফ্যাশনে প্রিন্ট করতে হবে, যেমনটি নীচের চিত্রটিতে রয়েছে −
সুতরাং আউটপুট −
এর মত হওয়া উচিতOutput: 10 20 40 70 50 30 60 80 90
উপরের সমস্যার জন্য, আমরা একটি সহজ পদ্ধতি অনুসরণ করেছি যেখানে আমাদের ম্যাট্রিক্সকে তির্যকভাবে পুনরাবৃত্তি করতে হবে এবং প্রতি আগের ম্যাচের পর দিক পরিবর্তন করতে পুনরাবৃত্তির মান পরিবর্তন করতে হবে।
অ্যালগরিদম
START STEP 1-> DECALRE AND SET k = 3, l = 3 STEP 2-> DECLARE A 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 AND len <= mn AND ++len LOOP FOR i = 0 AND i < len AND ++i PRINT mat[row][col] IF i + 1 == len THEN, BREAK END IF IF flag THEN, INCREMENT row BY 1 AND DECREMENT col BY 1 ELSE DECREMENT row BY 1 AND INCREMENT col BY 1 END IF END FOR IF len == mn THEN, BREAK END IF IF flag THEN INCREMENT row BY 1 AND SET flag = FALSE ELSE INCREMENT col BY 1 AND SET flag = TRUE END IF END FOR STEP 6-> IF row == 0 THEN, IF col == k – 1 THEN, INCREMENT row BY 1 ELSE INCREMENT col BY 1 END IF SET flag = 1 ELSE IF row == l – 1 THEN, INCREMENT col BY 1 ELSE INCREMENT row BY 1 SET flag = 0 END IF STEP 7-> SET MAX = MAXIMUM(k, l) – 1 STEP 8-> LOOP FOR len, diag = MAX AND diag > 0 AND --diag IF diag > mn THEN, SET len = mn ELSE SET len = diag END IF FOR i = 0 AND i < len AND ++i PRINT mat[row][col] IF i + 1 == len THEN, BREAK END IF IF flag THEN, INCREMENT row BY 1 AND DECREMENT col BY 1 ELSE INCREMENT col BY 1 AND DECREMENT row BY 1 END IF IF row == 0 || col == k – 1 THEN, IF col == k - 1 INCREMENT row BY 1 ELSE INCREMENT col BY 1 END IF SET flag = true ELSE IF col == 0 || row == l – 1 THEN, IF row == l – 1 THEN, INCREMENT col BY 1 ELSE INCREMENT row BY 1 END IF SET flag = false ENF IF END FOR 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); //to check the minimum number and return that minimum number for ( len = 1; len <= mn; ++len) { for ( i = 0; i < len; ++i) { printf("%d ", mat[row][col]); //Printing the matrix in zigzag format 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; //To check the maximum element for ( len, diag = MAX; diag > 0; --diag) { //Loop to go diagonally. 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