1101 火车进栈

题意

给定 1 ~ N 这 N 个整数和一个无限大的栈,每个数都要进栈并出栈一次。如果进栈的顺序为 1,2,...,N,那么可能的出栈序列有多少种?

思路

面对任何一个状态我们只有两种选择:

  1. 把下一个数进展
  2. 把当前栈顶的数出栈(如果栈非空)。
const int N=25;
int stk[N],top;
int ans[N];
int n;
int tot;
int cnt;

void dfs(int u)
{
    if(u > n)
    {
        if(++tot > 20) exit(0);
        for(int i=0;i<cnt;i++) cout<<ans[i];
        for(int i=top;i;i--) cout<<stk[i];
        cout<<endl;

        return;
    }

    if(top)
    {
        ans[cnt++]=stk[top--];
        dfs(u);
        stk[++top]=ans[--cnt];
    }

    stk[++top]=u;
    dfs(u+1);
    top--;
}

int main()
{
    cin>>n;

    dfs(1);

    //system("pause");
    return 0;
}
posted @ 2021-02-23 11:10  Dazzling!  阅读(51)  评论(0编辑  收藏  举报