c++ 统计出栈

题目描述

1~n依次入栈,统计不同的出栈的方式

栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两•种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。

输入

一个整数n(1<=n<=15)

输出

一个整数,即可能输出序列的总数目。

样例输入

3

样例输出

5

Source Code

#include <iostream>
#include <stdio.h>
using namespace std;
int n;
int t;
int s[20],top;
int opt[20];
int l = 0;
int ans = 0;
void dfs(int u)
{
    if (l == n)
    {
        ans ++;
        return ;
    }
    if (t <= n)//判断是否所有数据都已经入栈 如果有数据没有入栈,则执行
    {
        top ++;//栈顶指针向上移
        s[top] = t;//把t入栈
        t ++;//栈里面的数量 +1   或者已使用的数量 +1
        dfs(u + 1);//递归找下一个数字
        top --;//出栈
        t --;//栈里面的数量 -1
    }
    if (top >= 1)
    {
        int tmp = s[top];
        l ++;
        opt[l] = s[top];
        top --;
        dfs(u + 1);
        top ++;
        s[top] = tmp;
        l --;
    }
}
int main()
{
    cin >> n;
    t = 1;
    top = 0;
    dfs(1);
    cout << ans << endl;
}

(注释待续)

原文地址:https://www.cnblogs.com/LJA001162/p/11334914.html