记录一下如何判断是否为出栈顺序
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
int n;
int a[205];
int vis[205];
int cnt=0;
bool judge()
{
int i,j;
stack< int >s;
for( i=1,j=1;i<=n;)
{
if(i==a[j])
i++,j++;
else if(s.empty()||s.top()!=a[j])
{
s.push(i);
i++;
}
else if(s.top()==a[j])
{
s.pop();
j++;
}
}
while(!s.empty())
{
if(s.top()==a[j])
{
s.pop();
j++;
}
else
return false;
}
if(s.empty())
return true;
}
void dfs(int pos)
{
if(cnt==20)
return ;
if(pos==n+1)
{
if(judge())
{
cnt++;
for(int i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
}
return ;
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
a[pos]=i;
dfs(pos+1);
vis[i]=0;
}
}
}
int main()
{
cin>>n;
dfs(1);
}