تولید توالی براکت های صحیح مستقیماً از روش انجام بررسی پیروی می کند - فقط باید براکت های جدید را بدون نقض صحت اضافه کنیم. این کار با تکرار بازگشتی انجام می شود. اگر او را نمی شناسید - BE... آه، نه، می توانید سعی کنید با خواندن ادامه مطلب متوجه شوید. در اینجا یک نمونه کد برای یک نوع براکت وجود دارد:
#include <vector>
#include <iostream>
استفاده از namespace std;
int n; // نصف طول
بردار<چار> پاسخ // پاسخ ما
void rec(int تعادل) {
اگر (ans.size() == 2 * n) { // اگر اینطور شد، پس ما انجام شد < /span>
برای (int i = 0; i < 2 * n; i++)
cout << ans[i] << " ";
cout << "\n";
}
اگر (ans.size() + balance + 2 <= n * 2) { // بررسی کنید، ما این کار را انجام می دهیم، مهاربند باز جدید را می بندیم
// حالا مراقب دستان خود باشید: نیازی نیست برای هر دنباله بردار جداگانه بسازیم
ans.push_back('(');
rec (تعادل + 1)؛
ans.pop_back(); // برای درک این موضوع، باید از بازگشت آگاه باشید. ابتدا یک پرانتز به وکتور اضافه می کنیم و سپس همه این کدها را دوباره اجرا می کنیم.
// یعنی اگر بتوانیم دوباره یک پرانتز اضافه کنیم.
// و این اتفاق می افتد تا زمانی که ما شروع به خروج از بازگشت نکنیم - یعنی تا زمانی که به طول مورد نظر برسیم.
// سپس براکت ها شروع به برداشتن خواهند کرد. اگر این را می فهمید - من به شما تبریک می گویم، شما عالی هستید.
}
if (balance > 0) { // اگر بتوانیم یک براکت را ببندیم، آن را می بندیم.
ans.push_back(')');
rec (تعادل - 1)؛
ans.pop_back();
}
}
int main()
{
cin>> n
rec(0);
بازگشت 0;
}
و اکنون زمان دشواری ها - شما باید خودتان الگوریتم را برای چندین نوع براکت بنویسید! موهاهاهاهاهاهاهاهاهاها!