编程论坛's Archiver

妍清舞 发表于 2008-3-28 23:12

车厢调度--递归

车厢调度问题用递归怎么实现,要求输出各种可能的情况。麻烦各位大哥大姐解释一下,不需要太详细的算法,只要解释如何用递归实现就行。谢谢!

renmingjiang 发表于 2008-3-28 23:32

你能吧“车厢调度”仔细地描述一下吗?

妍清舞 发表于 2008-3-29 11:15

问题描述:
假设停在铁路调度站入口处的车厢序列的编号依次为1,2,3,...n设计一个程序,求 出所有可能由此输出的长度为n的车厢序列
基本要求: 用栈的顺序存储结构实现基本操作。 该问题要用递归的思想。
假设n=3,则有:3 2 1;2 3 1;2 1 3;1 2 3;1 3 2;五种可能,即每一个编号均有“入”和“出”两种状态。

妍清舞 发表于 2008-4-6 23:03

以下是从网上找到的递归函数,但看不太明白,麻烦各位大哥大姐帮忙分析一下,谢谢!
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
谢谢!

zhaoyg 发表于 2008-4-7 00:04

这个题我做过.
个人认为,若两个车厢号不是紧挨的,那么后一个车厢不可能排在前一个车厢的前面.若编号以此为0,1,2,3,那么例如当n=3时,不可能存在3021这样的序列

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.