要按照字典序输出,你的代码3的时候是错的。

#include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;

char ss[10000005];
int pos = 0;
bool fg = true;
void dfs(int pos, int l, int r, int flag) {
    if (r < l) return ;
    if (l == 0 && r == 0) {
        ss[pos] = '\0';
        if (fg == true) {
            fg = false;
            printf("%s", ss);
            return ;
        }
        printf(",%s", ss);
        return ;
    }
    if (flag == 0) {
        for (int i = l; i > 0; --i) {
            for (int j = 0; j < i; ++j) {
                ss[pos + j] = '(';
            }
            dfs(pos + i, l - i, r, flag ^ 1);
        }
    } else {
        for (int i = 1; i <= r; ++i) {
            for (int j = 0; j < i; ++j) {
                ss[pos + j] = ')';
            }
            dfs(pos + i, l, r - i, flag ^ 1);
        }
    }
}
int main() {
    ios::sync_with_stdio(false);
    //freopen("input.txt", "r", stdin);
    int n;
    cin >> n;
    dfs(0, n, n, 0);
    puts("");
    return 0;
}