এই অ্যালগরিদমটি অ্যারের এলিমেন্টগুলো স্পাইরালভাবে প্রিন্ট করতে ব্যবহৃত হয়। প্রথমে প্রথম রো থেকে শুরু করে পুরো কন্টেন্ট প্রিন্ট করা হয়, তারপর লাস্ট কলাম ফলো করে প্রিন্ট করা হয়, তারপর লাস্ট রো এবং এভাবে চলতে থাকে, így এলিমেন্টগুলো স্পাইরাল ফ্যাশনে প্রিন্ট হয়।
এই অ্যালগরিদমের টাইম কমপ্লেক্সিটি O(MN), যেখানে M হলো রো সংখ্যা এবং N হলো কলাম সংখ্যা।
ইনপুট এবং আউটপুট
ইনপুট: ম্যাট্রিক্স: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 আউটপুট: অ্যারেতে কন্টেন্ট স্পাইরাল ফর্মে 1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11
অ্যালগরিদম
dispSpiral(mat, m, n)
ইনপুট: ম্যাট্রিক্স mat, রো এবং কলাম 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উদাহরণ (C++)
#include#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++) { cout << array[currRow][i] << " "; } currRow++; for (i = currRow; i < m; ++i) { cout << array[i][n-1] << " "; } n--; if (currRow < m) { for (i = n-1; i >= currCol; --i) { cout << array[m-1][i] << " "; } m--; } if (currCol < n) { 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