標籤:style blog http color os io for ar art
原文連結:http://blog.csdn.net/doc_sgl/article/details/8917476
簡答題最後一題,編程實現所有括弧的合法匹配
如輸入3
輸出:"((()))”, “(()())”, “(())()”, “()(())”, “()()()”
思路:深搜+剪枝,關鍵在於記錄已經用掉的左括弧個數和右括弧的個數,
1,當用過的左括弧個數小於右括弧則非法;
2,當二者個數和大於2N則非法;
3,當二者個數相等且數目等於2N此時輸出。
#include <iostream>using namespace std;void DFS_bracket(char* str,int n, int left_used, int right_used){ if(left_used == right_used && left_used + right_used == 2*n) { for(int i = 0; i < left_used*2; ++i) cout<<str[i]; cout<<endl; return; } if(left_used < right_used || left_used + right_used >= 2*n) { return ; } int index = left_used + right_used; str[index] = ‘(‘; DFS_bracket(str, n, left_used + 1, right_used); str[index] = ‘)‘; DFS_bracket(str, n, left_used, right_used + 1);}int main(){ int parenthesisnum; cin>>parenthesisnum; char* str = new char[parenthesisnum*2+1]; DFS_bracket(str,parenthesisnum,0,0); return 0;}
輸出括弧所有合法匹配