কম্পিউটার

C++ এ কোনো অতিরিক্ত স্থান ব্যবহার না করে একটি ম্যাট্রিক্সকে ঘড়ির কাঁটার দিকে 90 ডিগ্রি ঘোরান


আমাদের একটি 2-ডি অ্যারে দেওয়া হয়েছে যা একটি ম্যাট্রিক্স প্যাটার্ন তৈরি করতে ব্যবহার করা হবে। কাজটি হল একটি ম্যাট্রিক্সকে ঘড়ির কাঁটার দিকে 90 ডিগ্রী ঘোরানো যাতে শেষ সারিটি প্রথম কলামে পরিণত হয়, দ্বিতীয় সারিটি দ্বিতীয় কলামে পরিণত হয় এবং প্রথমটি তৃতীয় কলামে পরিণত হয় এবং চ্যালেঞ্জ হল আমাদের কোন অতিরিক্ত স্থান ব্যবহার করতে হবে না৷

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

ইনপুট

int arr[row_col_size][row_col_size] = { { 5, 1, 4},
   { 9, 16, 12 },
   { 2, 8, 9}}

আউটপুট

Rotation of a matrix by 90 degree in clockwise direction without using any extra space is:
2 9 5
8 16 1
9 12 4

ব্যাখ্যা − আমাদের পূর্ণসংখ্যার প্রকারের একটি 2-D অ্যারে দেওয়া হয়েছে। এখন আমরা একটি ম্যাট্রিক্সকে ঘড়ির কাঁটার দিকে 90 ডিগ্রি ঘোরাব।

Before rotation-:
{ { 5, 1, 4},
{ 9, 16, 12 },
{ 2, 8, 9}}
After rotation-:
2 9 5
8 16 1
9 12 4

ইনপুট

int arr[row_col_size][row_col_size] = { { 2, 1, 9},
   { 11, 6, 32 },
   { 3, 7, 5}}

আউটপুট

Rotation of a matrix by 90 degree in clockwise direction without using any extra space is:
2 9 5
8 16 1
9 12 4

ব্যাখ্যা − আমাদের পূর্ণসংখ্যার প্রকারের একটি 2-D অ্যারে দেওয়া হয়েছে। এখন আমরা একটি ম্যাট্রিক্সকে ঘড়ির কাঁটার দিকে 90 ডিগ্রি ঘোরাব।

Before rotation-:
{ { 2, 1, 9},
{ 11, 6, 32 },
{ 3, 7, 5}}
After rotation-:
3 11 2
7 6 1
5 32 9

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

1. নিষ্পাপ দৃষ্টিভঙ্গি

  • একটি 2-ডি পূর্ণসংখ্যা অ্যারে ইনপুট করুন যা রো_কল_সাইজ সহ একটি ম্যাট্রিক্স হিসাবে গণ্য হবে।

  • Rotate_ClockWise(arr) ফাংশনে ডেটা পাস করুন।

  • Rotate_ClockWise(arr)

    ফাংশনের ভিতরে
    • আমি row_col_size/2 থেকে কম না হওয়া পর্যন্ত i থেকে 0 পর্যন্ত FOR লুপ শুরু করুন।

    • লুপের ভিতরে, j থেকে 0 থেকে j পর্যন্ত row_col_size - i - 1 থেকে কম পর্যন্ত FOR আর একটি লুপ শুরু করুন৷

    • লুপের ভিতরে, ptr কে arr[i][j], arr[i][j] কে arr[row_col_size - 1 - j][i], arr[row_col_size - 1 - j][i] এ arr[row_col_size সেট করুন - 1 - i][row_col_size - 1 - j], arr[row_col_size - 1 - i][row_col_size - 1 - j] থেকে arr[j][row_col_size - 1 - i] এবং arr[j][row_col_size - 1 - i] থেকে ptr.

  • আমি row_col_size থেকে কম না হওয়া পর্যন্ত i থেকে 0 পর্যন্ত FOR লুপ শুরু করুন। লুপের ভিতরে, j থেকে 0 থেকে j থেকে row_col_size কম না হওয়া পর্যন্ত আরেকটি লুপ FOR শুরু করুন; j++ এবং প্রিন্ট arr[i][j]।

2. দক্ষ পদ্ধতি

  • একটি 2-ডি পূর্ণসংখ্যা অ্যারে ইনপুট করুন যা রো_কল_সাইজ সহ একটি ম্যাট্রিক্স হিসাবে গণ্য হবে।

  • Rotate_ClockWise(arr) ফাংশনে ডেটা পাস করুন।

  • Rotate_ClockWise(arr)

    ফাংশনের ভিতরে
    • আমি row_col_size থেকে কম না হওয়া পর্যন্ত i থেকে 0 পর্যন্ত FOR লুপ শুরু করুন।

    • লুপের ভিতরে, j থেকে 0 থেকে j পর্যন্ত row_col_size - i থেকে কম পর্যন্ত FOR আর একটি লুপ শুরু করুন।

    • লুপের ভিতরে, ptr-এ arr[i][j], arr[i][j]-এ arr[row_col_size - 1 - j]arr[row_col_size - 1 - i] এবং [row_col_size - 1 - j] সেট করুন j][row_col_size - 1 - i] থেকে ptr.

    • স্টার্ট লুপ FOR i থেকে 0 পর্যন্ত i যতক্ষণ না i row_col_size / 2 থেকে কম হয়। লুপের ভিতরে, row_col_size থেকে j কম না হওয়া পর্যন্ত j থেকে 0 পর্যন্ত আরেকটি লুপ শুরু করুন। লুপের ভিতরে, ptr এ arr[i][j], arr[i][j] এ arr[row_col_size - 1 - i][j] এবং arr[row_col_size - 1 - i][j] এ ptr সেট করুন পি>

  • আমি row_col_size থেকে কম না হওয়া পর্যন্ত i থেকে 0 পর্যন্ত FOR লুপ শুরু করুন। লুপের ভিতরে, j থেকে 0 থেকে j থেকে row_col_size কম না হওয়া পর্যন্ত আরেকটি লুপ FOR শুরু করুন; j++ এবং প্রিন্ট arr[i][j]।

নিষ্পাপ দৃষ্টিভঙ্গি

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
#define row_col_size 3
void Rotate_ClockWise(int arr[row_col_size][row_col_size]){
    for(int i = 0; i < row_col_size / 2; i++){
      for(int j = i; j < row_col_size - i - 1; j++){
         int ptr = arr[i][j];
         arr[i][j] = arr[row_col_size - 1 - j][i];
         arr[row_col_size - 1 - j][i] = arr[row_col_size - 1 - i][row_col_size - 1 - j];
         arr[row_col_size - 1 - i][row_col_size - 1 - j] = arr[j][row_col_size - 1 - i];
         arr[j][row_col_size - 1 - i] = ptr;
      }
   }
}
int main(){
   int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}};
   Rotate_ClockWise(arr);
   cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n";
   for(int i = 0; i < row_col_size; i++){
      for(int j = 0; j < row_col_size; j++){
         cout << arr[i][j] << " ";
      }
      cout << '\n';
   }
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Rotation of a matrix by 90 degree in clockwise direction without using any extra space is:
2 9 5
8 16 1
9 12 4

দক্ষ পদ্ধতি

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
#define row_col_size 3
void Rotate_ClockWise(int arr[row_col_size][row_col_size]){
   for(int i = 0; i < row_col_size; i++){
      for(int j = 0; j < row_col_size - i; j++){
         int ptr = arr[i][j];
         arr[i][j] = arr[row_col_size - 1 - j][row_col_size - 1 - i];
         arr[row_col_size - 1 - j][row_col_size - 1 - i] = ptr;
      }
   }
   for(int i = 0; i < row_col_size / 2; i++){
      for(int j = 0; j < row_col_size; j++){
         int ptr = arr[i][j];
         arr[i][j] = arr[row_col_size - 1 - i][j];
         arr[row_col_size - 1 - i][j] = ptr;
      }
   }
}
int main(){
   int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}};
   Rotate_ClockWise(arr);
   cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n";
   for(int i = 0; i < row_col_size; i++){
      for(int j = 0; j < row_col_size; j++){
         cout << arr[i][j] << " ";
      }
      cout << '\n';
   }
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Rotation of a matrix by 90 degree in clockwise direction without using any extra space is:
2 9 5
8 16 1
9 12 4

  1. কিভাবে C++ ব্যবহার করে OpenCV তে একটি ভিডিও ঘোরানো যায়?

  2. সি++ ব্যবহার করে ওপেনসিভিতে একটি চিত্র কীভাবে ঘোরানো যায়?

  3. ইনসিডেন্স ম্যাট্রিক্স ব্যবহার করে গ্রাফ প্রতিনিধিত্ব করার জন্য C++ প্রোগ্রাম

  4. অ্যাডজাসেন্সি ম্যাট্রিক্স ব্যবহার করে গ্রাফ প্রতিনিধিত্ব করার জন্য C++ প্রোগ্রাম