车厢调度--递归
车厢调度问题用递归怎么实现,要求输出各种可能的情况。麻烦各位大哥大姐解释一下,不需要太详细的算法,只要解释如何用递归实现就行。谢谢! 你能吧“车厢调度”仔细地描述一下吗? 问题描述:假设停在铁路调度站入口处的车厢序列的编号依次为1,2,3,...n设计一个程序,求 出所有可能由此输出的长度为n的车厢序列
基本要求: 用栈的顺序存储结构实现基本操作。 该问题要用递归的思想。
假设n=3,则有:3 2 1;2 3 1;2 1 3;1 2 3;1 3 2;五种可能,即每一个编号均有“入”和“出”两种状态。 以下是从网上找到的递归函数,但看不太明白,麻烦各位大哥大姐帮忙分析一下,谢谢!
void Attemper(int pos,int path[],int num){
//车厢调度递归函数,当前处理位置pos的元素
int i,m;
//SqStack *S;
//InitStack(S);
if(pos<c_num){
Push(pos+1);
Attemper(pos+1,path,num);
Pop();
}
if(!Emptys()){
m=Pop();
path[num]=m;
num++;
Attemper(pos,path,num);
Push(m);
}
if(pos==c_num&&Emptys()){
for(i=0;i<num;i++)printf("%2d",path[i]);
printf("\n");
}
}//Attemper
还有如何改为先输出1 2 3 最后输出3 2 1
谢谢! 这个题我做过.
个人认为,若两个车厢号不是紧挨的,那么后一个车厢不可能排在前一个车厢的前面.若编号以此为0,1,2,3,那么例如当n=3时,不可能存在3021这样的序列
页:
[1]
