すべての合法的な順序――スタックとキューへの応用


すべての合法的な順序
                                                                                               ——スタックとキューへの適用
皆さんはスタック順が合法かどうかを判断した覚えがありますか?
今拡大して、テーマは入力nを求めて、そしてそれを出力してスタックのすべての合法的な並べ替えを出します.
#include
using namespace std;
#include
#define MaxSize 100
int n;
int Stack[MaxSize];//   
int Queue[MaxSize];//   
void fun2(int rear,int top,int i)//  :   i     
{
	int j;
	if(rear==n)//n        ,        
	{
		for(j=1;j<=n;j++)
			cout<-1)//    
		{
			rear++;//      
			Queue[rear]=Stack[top];//           
			top--;//      
			fun2(rear,top,i);//         
			top++;//        
			Stack[top]=Queue[rear];
			rear--;
		}
		if(i<=n)//             
		{
			top++;//   i     
			Stack[top]=i;
			fun2(rear,top,i+1);//         
		}
	}
}
int main()
{
	scanf("%d",&n);
	fun2(0,-1,1);
	return 0;
}

右のレールにn個のカバーが並べられています.彼が左のレールにある可能性のあるすべての車両の番号順をお願いします.
左のトラックはシーケンス・キューで表されていて、トラック・スタックはシーケンス・スタックで表されています.ある時点で、列の最後のポインタがrearであり、スタックの上のポインタがtopであり、iという番号の車の皮がトラックスタックの入り口に来たと仮定した場合、処理方法は再帰的である.出力スタックの一番上の要素は、列の中にもう一つの要素があります.スタックの入り口の車両番号は同じiです.もう一つの場合があります.イ倉庫すると、キューの中の要素は変わらず、スタックの中の要素は一つ多くなり、トラックスタックの入り口の車両番号はi+1になり、この時も再帰的に使えばいいです.