车辆停放【信息技术】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
车辆停放 问题描述 略 算法 题目中说:“在任何情况下,需要调度的最少轮数总不会超过 。”这一点是显而易见的。只要用以下的贪心算法即可得到满足条件的解: 首先从考虑范围中剔除所有已经在合法位置上的车。 任找一辆车,将其作为一个处理对象,找到它的合法位置,置入,使之成为已归位的车,今后不再考虑; 同时将原来占据它合法位置的车开出,作为下一个处理对象,重复以上过程。 对于这种处理过程,最终可能产生以下的情况: 1. 圈:即发现当前处理对象的合法位置与第一辆被操作车的原始位置相一致。当前操作序列结束,并形成圈状,该操作序列中的每一辆被处理车均已归位。 此时,如果被操作的车辆数小于W-1,说明本次调度的车辆限额未满,则继续寻找操作序列,加入本次车辆调度;否则,结束本次调度。 2. 链:当找到本次调度的第W个操作对象时,说明本次调度到此为止,将当前操作对象置入第1辆被操作车的原始位置而不管该位置是否它的合法位置,结束该次调度。 例如样例(紫色代表已归位的车辆): 初始 2 3 3 4 4 2 1 1 3 1 目标 1 1 1 2 2 3 3 3 4 4 1st 2 3 3 4 4 2 1 1 3 1 这是一条长为4的“链”。 2nd 4 3 3 2 2 3 1 1 4 1 两个长为2的“圈”。 3rd 1 1 3 2 2 3 3 1 4 4 一个长为2的“圈”。 结束 1 1 1 2 2 3 3 3 4 4 分析上面的操作方法,可以发现,“圈”中被操作车全部归位,而“链”中的被操作车除一辆外全部归位。 一次调度可能由若干个“圈”序列和至多一个“链”序列构成。 进一步地,若一次调度包含一个“链”序列,则操作的次数必为W(否则必可将链长度增加1,亦即多调度一辆车),于是归位的车辆数为W-1; 若一次调度只包含“圈”序列,则归位的车辆数≥W-1 (若所有圈的总长为W, 显然W辆完全归位;也可能总长为W-1,这是因为构成一次调度序列至少需要开动2辆车,所以剩余的可调度限额为1时,就意味着调度结束,这时归位的车辆数为W-1)。 而对于N辆车,处于非法位置的车辆数≤N,故,按照上述的处理方法,最多需要的调度次数为。 数据结构 题目要求的输出文件格式是这样的:首先输出调度次数,然后是每次调度的方案,由于对调度次数开始只有一个估计值,程序在空间方面也不紧张,所以我选择把每次的方案记录下来。 type arr=array[1..20000] of byte; {记录车辆停放情况} arr2=array[0..50] of integer; {记录每种型号的车辆的数量} arr3=array[0..20000] of integer; {记录每次调度方案} var car, {车辆的初始状态} target:^arr; {车辆的目标状态} num:arr2; index:array[1..20000] of integer; {由于是连续记录,index标识了每次调度在记录数组中的起始点} s,t:array[0..1] of ^arr3; {记录方案的数组} 时空评估 记录方案大约需要80K,加上其它的空间消耗,大约是140K。由于直接构造调度序列,程序运行基本不耗时。

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档