題目連結: https://zerojudge.tw/ShowProblem?problemid=a229

# 內容

請寫一個程式把所有合法括號匹配方式列出來!
Ex. (()) , ((()())) , ()((())) 是合法的匹配方式
)(, (()))( , ()(()( 是不合法的匹配方式
合法匹配的括號,從答案列的開頭到答案列某一點,左括弧次數永遠大於等於右括弧!

# 解題思路

使用 DFS,如果途中 (>) 則直接 return,直到放置數達到 n*2 為止

# 程式碼

#include <iostream>
using namespace std;
string s; int a, b;
void dfs(int n) {
    if(a < b) return;
    if(s.size() == n * 2) { if(a == b) cout << s << '\n'; }
    else {
        s.push_back('('); a ++; dfs(n); s.pop_back(); a--;
        s.push_back(')'); b ++; dfs(n); s.pop_back(); b--;
    }
}
main() {
    int n; while(cin >> n) dfs(n);
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay