এই অ্যালগরিদমটি সর্পিল উপায়ে অ্যারে উপাদানগুলিকে প্রিন্ট করতে ব্যবহৃত হয়৷ প্রথমে প্রথম সারি থেকে শুরু করে, পুরো বিষয়বস্তুটি প্রিন্ট করুন এবং তারপরে প্রিন্ট করার জন্য শেষ কলামটি অনুসরণ করুন, তারপর শেষ সারি এবং আরও অনেক কিছু, এভাবে এটি উপাদানগুলিকে সর্পিল ফ্যাশনে প্রিন্ট করে।
এই অ্যালগরিদমের সময় জটিলতা হল O(MN), M হল সারির সংখ্যা এবং N হল কলামের সংখ্যা৷
ইনপুট এবং আউটপুট
Input: The matrix: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Output: Contents of an array as the spiral form 1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16
অ্যালগরিদম
dispSpiral(mat, m, n)
ইনপুট: ম্যাট্রিক্স ম্যাট, সারি এবং কলাম m এবং n।
আউটপুট: ম্যাট্রিক্সের উপাদানগুলিকে সর্পিল ভাবে প্রিন্ট করুন।
Begin currRow := 0 and currCol := 0 while currRow and currCol are in the matrix range, do for i in range currCol and n-1, do display mat[currRow, i] done increase currRow by 1 for i in range currRow and m-1, do display mat[i, n-1] done decrease n by 1 if currRow < m, then for i := n-1 down to currCol, do display mat[m-1, i] done decrease m by 1 if currCol < n, then for i := m-1 down to currRow, do display mat[i, currCol] done increase currCol by 1 done End
উদাহরণ
#include <iostream> #define ROW 3 #define COL 6 using namespace std; int array[ROW][COL] = { {1, 2, 3, 4, 5, 6}, {7, 8, 9, 10, 11, 12}, {13, 14, 15, 16, 17, 18} }; void dispSpiral(int m, int n) { int i, currRow = 0, currCol = 0; while (currRow < ROW && currCol <COL) { for (i = currCol; i < n; i++) { //print the first row normally cout << array[currRow][i]<<" "; } currRow++; //point to next row for (i = currRow; i < m; ++i) { //Print the last column cout << array[i][n-1]<<" "; } n--; //set the n-1th column is current last column if ( currRow< m) { //when currRow is in the range, print the last row for (i = n-1; i >= currCol; --i) { cout << array[m-1][i]<<" "; } m--; //decrease the row range } if (currCol <n) { //when currCol is in the range, print the fist column for (i = m-1; i >= currRow; --i) { cout << array[i][currCol]<<" "; } currCol++; } } } int main() { dispSpiral(ROW, COL); }
আউটপুট
1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16