- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《算法竞赛入门》实验指导书
2014年1月
目 录
实验 1:地铁线路问题 1
实验 2 :装箱问题 6
实验 3 :数字三角形 10
实验 4 :报数问题 13
实验 5 :邮局选址问题 15
实验 6 :归并排序 19
实验 7 :最少硬币问题 22
实验 8 :装载问题 24
实验 9 :防卫导弹问题 27
实验 10 :堡垒问题 30
实验 11 :最长公共子序列 34
附录 1 :ACM 国际大学生程序设计竞赛简介 37
附录 2 :北大POJ 简介 40
附录 3 :如何在C 语言中读写数据文件 43
附录 4 :如何在VISUAL STUDIO 6.0 环境下创建和调试 C++程序 47
实验 1:地铁线路问题
[实验目的]
1. 练习数组的使用;
2. 练习队列与循环队列。
[实验准备]
1.队列的定义与实现;
2 .循环队列上两点之间的距离的计算;
3 .串的比较操作。
[实验题目]
假设有两条地铁线路,1 号线为直线线路,2号线为环线线路,假设1号线的
各个站点名称分别为A10, A11, A12, A13, A14, A15, A16, A17,2
号线的各个站点名称分别为B1, B2, B3, A15, B4, B5, B6, A12,
另外,假设地铁都是双向运行的。现给出两个地铁站名分别作为起点和终点,请
给出从起点到终点至少需要多少站。
[算法分析]
(1)直线线路和环线线路内的路线查找方式是不同的;
(2)由于有两条路线,所以可能存在换乘;
(3)由于直线线路和环线线路有两个交叉点,因此有时要分别计算通过这两
个站换乘的路线长度,并取长度短的路线作为最终路线;
(4)在环线内部,要分别计算两个环绕方向上的路线长度,并取长度短的路
线作为环线路线长度。
1
可以把各个站点名称保存在数组中,然后根据站名的数组下标计算两个站之
间的距离。如果是直线线路,则可以通过计算数组下标的差值得到。如果是环线
线路,则需要考虑两个绕行方向的数组下标差值。
该题目可按如下流程实现:
如果两个站点恰好为两个交叉点,
{
dis1=两个点之间的环线线路距离;
dis2=两个点之间的直线线路距离;
两个点之间的距离=min(dis1,dis2);
}
否则 如果两个车站都在1号线上
{
dis1=两个点之间的直线线路距离;
dis2=起点到第一个交叉点的距离+两个交叉点之间的距离+第二个交叉
点到终点的距离;
dis3=起点到第二个交叉点的距离+两个交叉点之间的距离+第一个交叉
点到终点的距离;
两个点之间的距离=min(dis1,dis2,dis3);
}
否则 如果两个车站都在2号线上
{
dis1=两个点之间的环线顺时针前进距离;
dis2=两个点之间的环线逆时针前进距离;
dis3=两个点先走2号线,再走1号线,再走2号线;
两个点之间的距离=min(dis1,dis2,dis3);
}
否则 如果起点在1号线上,终点在2号线上
{
dis1=起点与交叉点A12的距离+交叉点A12与终点的距离;
dis2=起点与交叉点A15的距离+交叉点A15与终点的距
原创力文档


文档评论(0)