এই সমস্যায় একটি পূর্ণসংখ্যা n দেওয়া আছে। আমাদের n জোড়া সমতুল্য পারেন্থেসিসের সব সম্ভাব্য কম্বিনেশন প্রিন্ট করতে হবে।
সমতুল্য পারেন্থেসিস হলো সেই পারেন্থেসিস জোড়া যাদের প্রতিটি ওপেনিং সিম্বলের জন্য একটি ক্লোজিং সিম্বল থাকে। এছাড়া জোড়াগুলো সঠিকভাবে নেস্টেড থাকতে হবে।
উদাহরণ
ইনপুট: n = 2
আউটপুট: {}{} {{}}
এই সমস্যাটি সমাধানের জন্য ব্র্যাকেটের জোড়াগুলোর ট্র্যাক রাখতে হবে। প্রাথমিক ব্র্যাকেট কাউন্ট ০। তারপর একটি ফাংশন রিকার্সিভলি কল করা হবে যতক্ষণ না মোট ব্র্যাকেট কাউন্ট n হয়। ব্র্যাকেট কাউন্ট করে, কাউন্টের ভিত্তিতে রিকার্সিভ কল করা হবে। যদি ওপেনিং ব্র্যাকেটের কাউন্ট ক্লোজিং ব্র্যাকেটের চেয়ে বেশি হয়, তবে ক্লোজিং ব্র্যাকেট বসানো হবে এবং বাকি জোড়াগুলোর জন্য রিকার্সিভ কল করা হবে। যদি ওপেনিং ব্র্যাকেটের কাউন্ট n-এর চেয়ে কম হয়, তবে বাকি জোড়াগুলোর জন্য রিকার্সিভ কল করা হবে।
বাস্তবায়ন
# include<iostream>
using namespace std;
# define MAX_COUNT 100
void printParenthesesPairs(int pos, int n, int open, int close) {
static char str[MAX_COUNT];
if (close == n) {
cout << str << endl;
return;
} else {
if (open > close) {
str[pos] = '}';
printParenthesesPairs(pos+1, n, open, close+1);
}
if (open < n) {
str[pos] = '{';
printParenthesesPairs(pos+1, n, open+1, close);
}
}
}
int main() {
int n = 3;
cout << "All parentheses pairs of length " << n << " are:\n";
if (n > 0)
printParenthesesPairs(0, n, 0, 0);
getchar();
return 0;
}
আউটপুট
All parentheses pairs of length 3 are :
{}{}{} {}{{}} {{}}{} {{}{}} {{{}}}