要按照字典序输出,你的代码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;
}