求教算法,不知道这个难不难

zgy231552 2002-05-17 04:29:39
1,2,3,4,5....n 按顺序进栈,设计一个算法,输出所有可能的出栈可能
...全文
4 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zgy231552 2002-05-19
大家写写看,我回去好好想想.................
回复
pigsanddogs 2002-05-18
我的思路:
fun(n):以第一个数出践为标识.那有n-1种可能;
它可以尾随2,3...n 出践比如尾随m出践.在操作(出践)它之前,他一直是践底.其余数的操作都不跟他有关.所以有fun(m-1).而之后操作(出践)它以后.践为空了.之后还余下n-m个待排有续数.他的操作方法为fun(n-m).
所以可以分解成 fun(n)=fun(0)*fun(n-1)+fun(1)*fun(n-2)+...+fun(n-1)*fun(0) fun(1)=0并且定义fun(0)=1.
程序实现:
#include <iostream.h>
#include <stdio.h>
#define MAX_NUMBER 3
void push(int n)
{
cout<<"push("<<n<<")";
}
void pop(int n)
{
cout<<"pop("<<n<<")";
}
void fun(int start,int end)
{
for(int i=start;i<=end;i++)
{
push(start);
if(i!=start)
fun(start+1,i);
pop(start);
if(i!=end)
fun(i+1,end);
cout<<endl;
}
}
void main()
{
fun(1,MAX_NUMBER);
}

/*这个递归函数有个bug.我不知道怎么修改.比如fun(1,3)递归成为=push(1),fun(2,3),pop(1).<----其中一个解;
本来因该把fun(2,3)={push(2),pop(2),fun(3,3) },{push(2),fun(2,3),pop(2)},每个分解式都要加入 push(1),pop(1),可以用递归方法我无法展开.只是成为了 push(1),{push(2),pop(2),fun(3,3),{push(2),fun(2,3),pop(2),}pop(1)....欢迎大家指正..!
另外 leopro(六月飞雪) 的思路不错.谁能把算法写出来?
*/


回复
javan 2002-05-18
我写了个程序,用比较笨的方法,用循环输出。
例如,用数组a[4]={'a','b','c','d'}的下标0,1,2,3来表示进栈顺序。
然后根据栈的特性写出一个符合其特性的表达式。
#include<stdio.h>
void main(void)
{
int i,j,k,l;
char a[4]={'A','B','C','D'};
i=j=k=l=0;
for(;i<4;i++)
{
for(j=0;j<4;j++)
{
if(i!=j)
{
for(k=0;k<4;k++)
{
if(i!=k&&j!=k)
{
for(l=0;l<4;l++)
{
if(l!=i&&l!=j&&l!=k)
{
if((i>k&&j<k)||(j>l&&l>k)) ;
else
{
printf("%c",a[i]);printf(" ");
printf("%c",a[j]);printf(" ");
printf("%c",a[k]);printf(" ");
printf("%c",a[l]);
printf("\n");
}

}
}
}
}
}
}
}
}
回复
zgy231552 2002-05-17
我看你们都比较轻视这个问题,这个问题的所有可能的出栈可能为:(2n)!/(n+1)!
好像没有一本数据结构书有输出所有的可能序列的算法.
我是这样理解的:每个元素都有两种可能留在堆栈里面或者直接输出.所以可以构造这样一颗二叉树,但是输出的不全,问题就是,在一个元素输出的时候,此时的堆栈也有两种可能....,比较复杂.那位高人写写看 .
回复
huahao0672 2002-05-17
数据结构的书上这类算法太多了,自已去看一下书吧!
回复
leopro 2002-05-17
楼上理解错误

设t(i)时刻栈中有k个元素,可能出栈元素个数为m(0<=m<=k)
t(i+1)时刻又进栈一元素,此时栈中元素个数为k-m+1
……

不难
回复
kbsoft 2002-05-17
如果是按顺序进栈,只能按相反顺序出来
除非你是说有多少种进展可能?
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2002-05-17 04:29
社区公告
暂无公告