c++ 统计出栈
发布时间:2020-12-16 10:40:31 所属栏目:百科 来源:网络整理
导读:题目描述 1~n依次入栈,统计不同的出栈的方式 栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两?种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序
题目描述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; } (注释待续) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |