四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())

来源:互联网 发布:小米查看支持什么网络 编辑:程序博客网 时间:2024/05/16 12:34

回溯法可以用来求解排列组合问题

回溯法框架

void backtrack (int  t){       if  (t>n)  output(x);       else         for  (int i=f(n,t);i<=g(n,t);i++) {             x[t]=h(i);             if (constraint(t)&&bound(t)) backtrack(t+1);          }}


 

#include <iostream>using namespace std;//匹配数int num=0;//判断当前n对括号是否匹配bool isMatch(int n,char* bracket){int left_num=0,right_num=0;for(int i=0;i<2*n;++i){if(bracket[i]=='l')left_num++;else if(bracket[i]=='r')right_num++;if(left_num<right_num)return false;}if(left_num==n && right_num==n)return true;elsereturn false;}//回溯法void BracketMatch(int n,int i,char* bracket){if(i==2*n){if(isMatch(n,bracket))num++;return;}else{bracket[i]='l';BracketMatch(n,i+1,bracket);bracket[i]='r';BracketMatch(n,i+1,bracket);}}int main(){int n;cin >>n;char* bracket=new char[2*n];BracketMatch(n,0,bracket);cout <<num<<endl;return 0;}


 

原创粉丝点击