আমাদের কাছে একটি 2-D অ্যারে আছে যা ম্যাট্রিক্স প্যাটার্ন তৈরি করতে ব্যবহার হবে। কাজটি হলো ম্যাট্রিক্সকে ৯০ ডিগ্রি অ্যান্টি-ক্লকওয়াইজ (বামদিকে) ঘুরানো যাতে প্রথম রো প্রথম কলাম হয়, সেকেন্ড রো সেকেন্ড কলাম হয় এবং থার্ড থার্ড কলাম হয়, এবং চ্যালেঞ্জ হলো আমাদের এক্সট্রা স্পেস ব্যবহার করা যাবে না।
বিভিন্ন ইনপুট আউটপুট সিনেরিও −
ইনপুট −
int arr[row_col_size][row_col_size] = { { 5, 1, 4}, { 9, 16, 12 }, { 2, 8, 9}}
আউটপুট −
এক্সট্রা স্পেস ছাড়া ম্যাট্রিক্স ৯০ ডিগ্রি ঘুরানোর ফলাফল: 4 12 9 1 16 8 5 9 2
ব্যাখ্যা − আমাদের কাছে একটি ইন্টিজার টাইপের 2-D অ্যারে আছে। এখন আমরা ম্যাট্রিক্সকে ৯০ ডিগ্রি ক্লকওয়াইজ (দাঁয়দিকে) ঘুরাব।
ঘুরানোর আগে-: { { 5, 1, 4}, { 9, 16, 12 }, { 2, 8, 9}} ঘুরানোর পর-: 2 12 9 1 16 8 5 9 2
ইনপুট −
int arr[row_col_size][row_col_size] = { { 2, 1, 9}, { 11, 6, 32 }, { 3, 7, 5}}
আউটপুট −
এক্সট্রা স্পেস ছাড়া ম্যাট্রিক্স ৯০ ডিগ্রি ক্লকওয়াইজ ঘুরানোর ফলাফল: 9 32 5 1 6 7 2 7 3
ব্যাখ্যা − আমাদের কাছে একটি ইন্টিজার টাইপের 2-D অ্যারে আছে। এখন আমরা ম্যাট্রিক্সকে ৯০ ডিগ্রি ক্লকওয়াইজ (দাঁয়দিকে) ঘুরাব।
ঘুরানোর আগে-: { { 2, 1, 9}, { 11, 6, 32 }, { 3, 7, 5}} ঘুরানোর পর-: 9 32 5 1 6 7 2 7 3
নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি
১. নেইভ পদ্ধতি (Naive Approach)
row_col_size সহ একটি 2-D ইন্টিজার অ্যারে ইনপুট নেওয়া যেটি ম্যাট্রিক্স হিসেবে বিবেচিত হবে।
Rotate_ClockWise(arr) ফাংশনে ডেটা পাস।
Rotate_ClockWise(arr) ফাংশনের ভিতরে
i ০ থেকে row_col_size/2 - ১ পর্যন্ত FOR লুপ।
লুপের ভিতরে j i থেকে 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 সেট।
i ০ থেকে row_col_size-১ পর্যন্ত FOR লুপ। লুপের ভিতরে j ০ থেকে row_col_size-১ পর্যন্ত FOR লুপ এবং arr[i][j] প্রিন্ট।
২. দক্ষ পদ্ধতি (Efficient Approach)
row_col_size সহ একটি 2-D ইন্টিজার অ্যারে ইনপুট নেওয়া যেটি ম্যাট্রিক্স হিসেবে বিবেচিত হবে।
Rotate_ClockWise(arr) ফাংশনে ডেটা পাস।
Rotate_ClockWise(arr) ফাংশনের ভিতরে
i ০ থেকে row_col_size-১ পর্যন্ত FOR লুপ।
লুপের ভিতরে j ০ থেকে row_col_size - i - ১ পর্যন্ত FOR লুপ।
লুপের ভিতরে 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 সেট।
i ০ থেকে row_col_size / 2 - ১ পর্যন্ত FOR লুপ। লুপের ভিতরে j ০ থেকে row_col_size-১ পর্যন্ত FOR লুপ। লুপের ভিতরে ptr = arr[i][j], arr[i][j] = arr[row_col_size - 1 - i][j] এবং arr[row_col_size - 1 - i][j] = ptr সেট।
i ০ থেকে row_col_size-১ পর্যন্ত FOR লুপ। লুপের ভিতরে j ০ থেকে row_col_size-১ পর্যন্ত FOR লুপ এবং arr[i][j] প্রিন্ট।
নেইভ পদ্ধতি (Naive Approach)
উদাহরণ
#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
দক্ষ পদ্ধতি (Efficient Approach)
উদাহরণ
#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