n对括号有多少种匹配排列方式

#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;

	else

		return 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;

}

你可能感兴趣的:(匹配)