求所有合法出栈序列的算法????
对于序列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数