📄 车厢调度3.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
typedef struct SqStack
{
int *top;
int *base;
int stacksize;
}SqStack;
struct SqStack stack;
int trainsize;
int trainsource[33];
void Show(int list_in[]);
void Schedule(int list_in[],int source_num,int list_num);
void InitStack2(SqStack *S,int base_size)
{
S->base=(int *)malloc(base_size * sizeof(int));
if(!S->base)
{
puts("分配内存失效!");
return ;
}
S->top=S->base;
S->stacksize=base_size;
}
void Push2(SqStack *S, int e)
{
*(S->top++)=e;
}
void Pop2(SqStack *S)
{
int e;
if(S->top==S->base)
{
puts("");
return ;
}
e=*--S->top;
printf("%d ",e);
}
void TrainSchedule()
{
int i;
int trainlist[66];
printf("请输入车厢的序列的长度:");
scanf("%d",&trainsize);
if(trainsize<=0 || trainsize>=33)
{
puts("错误的长度!");
return;
}
for(i=0;i < trainsize;i++)
trainsource[i]=i+1;
for(i=0;i<66;i++)
trainlist[i]=-1;
Schedule(trainlist,1,0);
}
void Schedule(int list_in[],int source_num,int list_num)
{
int i;
int sum=0;
int judge;
int trainlist[50];
if(source_num > trainsize)
return;
for(i=0;i<50;i++)
trainlist[i]=-1;
for(i=0;i<=list_num-1; i++)
{
trainlist[i]=list_in[i];
sum=sum+trainlist[i];
}
if(sum != 0)
{
trainlist[list_num]=1;
Schedule(trainlist,source_num+1,list_num+1);
for(i=0,judge=0;i<trainsize*2;i++)
judge=judge+trainlist[i];
if(source_num == trainsize && judge == 0)
Show(trainlist);
trainlist[list_num]=-1;
Schedule(trainlist,source_num,list_num+1);
for(i=0,judge=0;i<trainsize*2;i++)
judge=judge+trainlist[i];
if(source_num == trainsize && judge == 0)
Show(trainlist);
}
else
{
trainlist[list_num]=1;
Schedule(trainlist,source_num+1,list_num+1);
for(i=0,judge=0;i<trainsize*2;i++)
judge=judge+trainlist[i];
if(source_num == trainsize && judge == 0)
Show(trainlist);
}
}
void Show(int list_in[])
{
int i,cur=0;
int length;
SqStack stack;
InitStack2(&stack,trainsize);
length=trainsize*2;
for(i=0;i<length;i++)
{
if(list_in[i]==1)
Push2(&stack,trainsource[cur++]);
else if(list_in[i]==-1)
Pop2(&stack);
else
puts("error!");
}
puts("");
}
int main()
{
TrainSchedule();
getchar();
getchar();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -