কম্পিউটার টিউটোরিয়াল

ম্যাট্রিক্স স্পাইরালভাবে প্রিন্ট করা

এই অ্যালগরিদমটি অ্যারের এলিমেন্টগুলো স্পাইরালভাবে প্রিন্ট করতে ব্যবহৃত হয়। প্রথমে প্রথম রো থেকে শুরু করে পুরো কন্টেন্ট প্রিন্ট করা হয়, তারপর লাস্ট কলাম ফলো করে প্রিন্ট করা হয়, তারপর লাস্ট রো এবং এভাবে চলতে থাকে, í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
  1. সি প্রোগ্রামিং-এ O(1) এক্সট্রা স্পেসে n×n স্পাইরাল ম্যাট্রিক্স প্রিন্ট করা

  2. সি প্রোগ্রামিং-এ ম্যাট্রিক্স ডায়াগোনাল প্যাটার্নে সংখ্যা প্রিন্ট করা

  3. সি++-এ স্পায়রাল ম্যাট্রিক্স III (Spiral Matrix III)

  4. C++-এ একটি ম্যাট্রিক্স কাউন্টার-ক্লকওয়াইজ স্পাইরাল ফর্মে প্রিন্ট করা