C++ STL-এ prev_permutation ফাংশনটি একটি রেঞ্জের উপাদানগুলোকে লেক্সিকোগ্রাফিক্যালি ছোট পারমুটেশন-এ পুনর্বিন্যাস করে। একটি N উপাদানের N! সম्भাব্য পারমুটেশন থাকে। এই ফাংশনটি বর্তমান পারমুটেশন থেকে ঠিক আগের পারমুটেশনে চলে যায়।
এলগরিদম
শুরু
ইন্টিজার অ্যারে elements[] ঘোষণা করুন
উপাদান সংখ্যা e ইনপুট নিন
কীবোর্ড থেকে e সংখ্যক ডেটা দিয়ে elements[] ইনিশিয়ালাইজ করুন
সব উপাদান সর্ট করুন (আরোহী ক্রমে)
অ্যারে রিভার্স করুন (নিম্নক্রমে আনার জন্য)
দো-হোল লুপ:
show(elements) // বর্তমান পারমুটেশন দেখান
যতক্ষণ (prev_permutation(elements, elements + e))
শেষ
উদাহরণ কোড
#include <iostream>
#include <algorithm>
using namespace std;
void show(int a[], int n) {
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
}
int main() {
int e, i;
cout << "Enter number of elements to be inserted: ";
cin >> e;
int elements[e];
for (i = 0; i < e; i++) {
cout << "Enter " << i + 1 << " element: ";
cin >> elements[i];
}
sort(elements, elements + e); // আরোহী ক্রমে সাজানো
reverse(elements, elements + e); // নিম্নক্রমে আনা (সবচেয়ে বড় পারমুটেশন)
cout << "The " << e << "! possible permutations with " << e << " elements:" << endl;
do {
show(elements, e);
} while (prev_permutation(elements, elements + e));
return 0;
}
নমুনা আউটপুট (ইনপুট: 7, 6, 10, 2)
Enter number of elements to be inserted: 4 Enter 1 element: 7 Enter 2 element: 6 Enter 3 element: 10 Enter 4 element: 2 The 4! possible permutations with 4 elements: 10 7 6 2 10 7 2 6 10 6 7 2 10 6 2 7 10 2 7 6 10 2 6 7 7 10 6 2 7 10 2 6 7 6 10 2 7 6 2 10 7 2 10 6 7 2 6 10 6 10 7 2 6 10 2 7 6 7 10 2 6 7 2 10 6 2 10 7 6 2 7 10 2 10 7 6 2 10 6 7 2 7 10 6 2 7 6 10 2 6 10 7 2 6 7 10
নোট: prev_permutation ব্যবহার করতে হলে অ্যারেটি নিম্নক্রমে (সবচেয়ে বড় পারমুটেশন) থেকে শুরু করতে হয়। ফাংশনটি false রিটার্ন করলে আর কোনো ছোট পারমুটেশন নেই।