এই সমস্যায়, n দৈর্ঘ্যের একটি স্ট্রিং দেওয়া থাকে এবং আমাদের স্ট্রিংয়ের ক্যারেক্টারগুলোর সব পারমুটেশন সর্টেড অর্ডারে প্রিন্ট করতে হবে।
উদাহরণ দিয়ে বুঝি:
ইনপুট: 'XYZ'
আউটপুট: XYZ, XZY, YXZ, YZX, ZXY, ZYX।
এখানে আমাদের সব পারমুটেশন লেক্সিকোগ্রাফিক্যাল অর্ডারে (বর্ণানুক্রমিক ক্রমে) প্রিন্ট করতে হবে।
এই সমস্যাটি সমাধান করতে, আমাদের প্রথমে অ্যারেটি বর্ণানুক্রমিক ক্রমে সর্ট করতে হবে, সর্টেড অ্যারেটি পারমুটেশনের প্রথম এলিমেন্ট। এবং তারপর স্ট্রিংয়ের পরবর্তী হাইয়ার অর্ডার পারমুটেশন জেনারেট করতে হবে।
নিচের কোডটি সমাধানটি আরও স্পষ্ট করবে:
C++ উদাহরণ
#include<iostream> #include<string.h> using namespace std; int compare(const void *a, const void * b){ return ( *(char *)a - *(char *)b ); } void swap(char* a, char* b) { char t = *a; *a = *b; *b = t; } int finduBound(char str[], char first, int l, int h) { int ubound = l; for (int i = l+1; i <= h; i++) if (str[i] > first && str[i] < str[ubound]) ubound = i; return ubound; } void generatePermutaion ( char str[] ) { int size = strlen(str); qsort( str, size, sizeof( str[0] ), compare ); bool isFinished = false; while ( ! isFinished ) { cout<<str<<"\t"; int i; for ( i = size - 2; i >= 0; --i ) if (str[i] < str[i+1]) break; if ( i == -1 ) isFinished = true; else { int ubound = finduBound( str, str[i], i + 1, size - 1 ); swap( &str[i], &str[ubound] ); qsort( str + i + 1, size - i - 1, sizeof(str[0]), compare ); } } } int main() { char str[] = "NOPQ"; cout<<"Permutation in Sorted order :\n"; generatePermutaion(str); return 0; }আউটপুট
Permutation in Sorted order: NOPQ NOQP NPOQ NPQO NQOP NQPO ONPQ ONQP OPNQ OPQN OQNP OQPN PNOQ PNQO PONQ POQN PQNO PQON QNOP QNPO QONP QOPN QPNO QPON