车厢调度问题-非_递归算法

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

假设停在铁路调度站入口处的车厢序列的编号依次为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,继续检查


</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值