求栈的所有可能输出序列

问题:
给一些元素,求把它们塞进栈之后,所有的可能出栈序列
可能序列的种数等于Catlan数
代码如下:

#include 
#include 
#include 
using namespace std;

int flag;
void Catlan(char a[], int l, int r)
{
	int x,y,z;
	if(l == r)
	{
		flag = 1;
		for(x = 0;x < r - 1;x++)
		{
			for(y = x + 1;y < r;y++)
			{
				for(z = y + 1;z <= r;z++)
				{
					if((a[y] < a[z])&&(a[z] < a[x]))
					{
					    flag = 0;					
					}

				}
			}
		}
		if(flag)
		{
			printf("%s\n", a);
		}
	}
	for(int i(l); i <= r ;i++)
	{
		int temp = a[i];
		a[i] = a[l];
		a[l] = temp;
		Catlan(a,l + 1,r);
		a[l] = a[i];
		a[i] = temp;
	}
}
 
int main()
{
	char s[20];
	cout << "请输入入栈元素:"; 
	cin >> s;
	cout << endl;
	cout << "所有可能序列:\n"; 
	Catlan(s, 0, strlen(s)-1);
}

以上

你可能感兴趣的:(求栈的所有可能输出序列)