算法与数据结构:算法实验3.1 车皮编序问题
#include<stdio.h>
#include<stdlib.h>
struct slink
{
int key;
int next;
};
struct Stack
{
int top;
slink* stack;
};
Stack* Stack_init(int n)
{
Stack *p=(Stack*)malloc(sizeof(Stack));
p->stack=(slink*)malloc((n+1)*sizeof(slink));
p->top=0;
return p;
}
void push(int n,Stack* s)
{
s->stack[s->top+1].next=s->top++;
s->stack[s->top].key=n;
}
int pop(Stack*s)
{
int x=s->stack[s->top--].key;
return x;
}
bool empty(Stack*s)
{
return s->top==0;
}
void show(Stack* s)
{
int p=s->top;
while(p!=0)
{
printf("%d ",s->stack[p--]);
}
}
int num=0;
int n,i;
void find(Stack* p1,Stack*p2,Stack*p)
{
int temp;
if(empty(p1))
{
num++;
show(p);
show(p2);
printf("\n");
return;
}
push(pop(p1),p2);
find(p1,p2,p);
push(pop(p2),p1);
if(p2->top!=0)
{
push(pop(p2),p);
find(p1,p2,p);
push(pop(p),p2);
}
}
int main()
{
scanf("%d",&n);
Stack*p1=Stack_init(n);
Stack*p2=Stack_init(n);
Stack*p=Stack_init(n);
for(i=n;i>0;i--)
push(i,p1);
find(p1,p2,p);
printf("num=%d",num);
}