এই সমস্যায়, আমাদের স্ট্রিং স্ট্র দেওয়া হয়েছে, এবং আমাদের একটি অভিধানিক ক্রমে অক্ষরগুলির সমস্ত সংমিশ্রণ মুদ্রণ করতে হবে৷
সমস্যাটি আরও ভালোভাবে বোঝার জন্য একটি উদাহরণ নেওয়া যাক -
Input: str = ‘XYZ’ Output : X XY XYZ XZ XZY Y YX YXZ YZ YZX Z ZX ZXY ZY ZYX
এই সমস্যাটি সমাধান করার জন্য, আমরা স্ট্রিং-এ অক্ষরের সমস্ত সমন্বয় প্রিন্ট করব। এই জন্য, আমাদের স্ট্রিং এর অক্ষর সংরক্ষণ করার জন্য একটি মানচিত্র ডেটা কাঠামো প্রয়োজন। বাস্তবায়নের জন্য, সমস্ত সমন্বয়ের ট্র্যাক রাখতে আমাদের ব্যাকট্র্যাকিং ব্যবহার করতে হবে।
উদাহরণ
#include <bits/stdc++.h> using namespace std; void printResult(char* result, int len); void findstringCombination(char result[], char str[], int count[],int level, int size, int length) ; void printCharCombination(string str); int main(){ string str = "ABC"; cout<<"The combination of characters of the string :\n"; printCharCombination(str); return 0; } void findstringCombination(char result[], char str[], int count[],int level, int size, int length){ if (level == size) return; for (int i = 0; i < length; i++) { if (count[i] == 0) continue; count[i]--; result[level] = str[i]; printResult(result, level); findstringCombination(result, str, count, level + 1, size, length); count[i]++; } } void printCharCombination(string str){ map<char, int> mp; for (int i = 0; i < str.size(); i++) { if (mp.find(str[i]) != mp.end()) mp[str[i]] = mp[str[i]] + 1; else mp[str[i]] = 1; } char* input = new char[mp.size()]; int* count = new int[mp.size()]; char* result = new char[str.size()]; map<char, int>::iterator it = mp.begin(); int i = 0; for (it; it != mp.end(); it++) { input[i] = it->first; count[i] = it->second; i++; } int length = mp.size(); int size = str.size(); findstringCombination(result, input, count, 0, size, length); } void printResult(char* result, int len){ for (int i = 0; i <= len; i++) cout<<result[i]; cout<<endl; }
আউটপুট
স্ট্রিং-
-এর অক্ষরের সংমিশ্রণA AB ABC AC ACB B BA BAC BC BCA C CA CAB CB CBA