কম্পিউটার

সর্পিল উপায়ে ম্যাট্রিক্স প্রিন্ট করুন


এই অ্যালগরিদমটি সর্পিল উপায়ে অ্যারে উপাদানগুলিকে প্রিন্ট করতে ব্যবহৃত হয়৷ প্রথমে প্রথম সারি থেকে শুরু করে, পুরো বিষয়বস্তুটি প্রিন্ট করুন এবং তারপরে প্রিন্ট করার জন্য শেষ কলামটি অনুসরণ করুন, তারপর শেষ সারি এবং আরও অনেক কিছু, এভাবে এটি উপাদানগুলিকে সর্পিল ফ্যাশনে প্রিন্ট করে।

এই অ্যালগরিদমের সময় জটিলতা হল 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

  1. C প্রোগ্রামে O(1) অতিরিক্ত স্থান ব্যবহার করে n x n স্পাইরাল ম্যাট্রিক্স প্রিন্ট করুন।

  2. সি প্রোগ্রামে ম্যাট্রিক্স তির্যক প্যাটার্নে সংখ্যা মুদ্রণ করুন।

  3. C++ এ স্পাইরাল ম্যাট্রিক্স III

  4. একটি প্রদত্ত ম্যাট্রিক্স C++ এ ঘড়ির কাঁটার বিপরীতে সর্পিল আকারে প্রিন্ট করুন