首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求所有合法出栈序列的算法?该怎么处理

2012-04-24 
求所有合法出栈序列的算法????对于序列1 2 3 …… n。入栈出栈。编程求出所有合法出栈序列。给出思路和算法。代

求所有合法出栈序列的算法????
对于序列1 2 3 …… n。
入栈出栈。
编程求出所有合法出栈序列。给出思路和算法。代码无所谓。

[解决办法]
用C[m][n]表示m到n的出栈序列.
可以这样考虑C[1][n]
(1) 1 在第一位出栈,则出栈序列为 1 C[2][n]
(2) 1 在第二位出栈,则出栈序列为 21 C[3][n]
(3) 1 在第m位出栈,m>2, 则出栈序列为 C[2][m] 1 C[m+1][n]
(4) 1 在第n位出栈, 则出栈序列为 C[2][n] 1

在程序里输出这些序列可以通过循环和递归,注意边界处理就可以。

[解决办法]
如果你是要输出所有的序列,那就直接用递归枚举吧。
对于当前的每一种状态,要变成合法的序列,只有两种选择:1.如果栈非空,弹出栈顶元素;2如果还有数没有进栈,把它压进栈。然后就可以递归处理这两种情况了。
然后栈为空而且所有数都进过栈了,当前队列就是一种合法序列了,把它输出。

如果你只想求序列数量,就是Catalan数

热点排行