Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
这道题也是深度优先算法题目。
方案一:错误的解法
在一开始附设一个标记数组,后来自以为没有什么用处,就去掉了,然后得出了下面的代码,以及下面的结果。
#include <stdio.h>
#include <stdlib.h>
void DFS(char *buf,int begin,int end,int n)
{
if(begin >= end){
if(end == n)
puts(buf);
return ;
}
buf[begin] = '(';
for(int w = begin+1;w <= end;w += 2){
buf[w] = ')';
DFS(buf,begin+1,w-1,n);
DFS(buf,w+1,end,n);
}
}
void DFSTraverse(int n)
{
if(n <= 0)
return;
char *buf = (char *)malloc((2*n + 1)*sizeof(char));
buf[2*n] = '\0';
DFS(buf,0,2*n-1,2*n-1);
}
int main()
{
int n;
while(scanf("%d",&n) != EOF){
DFSTraverse(n);
}
return 0;
}