问题描述:
假设停在铁路调度站入口处的车厢序列的编号依次为1,2,3……N。设计一个程序,求出所有由此输出的长度为N的车厢序列。
算法综述:
上一篇博文实现了解决车厢问题的递归算法。本文试图对N个车厢的全排列进行筛选,选出可能的序列。
必须声明,产生全排列的算法也有两种:递归和非递归,本文使用的是递归产生全排列。全排列的非递归算法后面再说。。。
调度站的本质是一个栈,LIFO决定了输出序列必须满足:
若以编号0,1,2,3...n-1的顺序进行调度,在一个输出序列x0,x1,x2......x(n-1)中,对于每个xi,序列x(i+1)......x(n-1)中,编号小于xi的车厢必须是递减的。
对每一个序列从后往前检查,max表示没检查到的最大元素。max初始为n-1,在没有检查到max之前(说明max已经出站),比max小的元素都应该是有序的,检查到max后,限制条件有所放宽,寻找新的max,继续检查
</

本文探讨了如何解决车厢调度问题,不同于上一篇采用递归算法,这次使用非递归方法来生成所有可能的车厢序列。调度站遵循LIFO原则,要求输出序列在每个位置xi之后,编号小于xi的车厢必须是递减的。通过非递归算法,程序展示了不同车厢数量下的序列种类数量,例如n=4时有14种。

450

被折叠的 条评论
为什么被折叠?



