地铁换乘---一道题目,求思路,不求代码

veryshowboy1 2013-04-17 11:52:26
1. 地铁换乘

为解决交通难题,某城市修建了若干条交错的地铁线路,线路名及其所属站名如stations.txt所示。

线1
苹果园
....
四惠东

线2
西直门
车公庄
....
建国门

线4
....

其中第一行数据为地铁线名,接下来是该线的站名。
当遇到空行时,本线路站名结束。

下一行开始又是一条新线....直到数据结束。


如果多条线拥有同一个站名,表明:这些线间可以在该站换车。

为引导旅客合理利用线路资源,解决交通瓶颈问题,该城市制定了票价策略:

1. 每条线路可以单独购票,票价不等。
2. 允许购买某些两条可换乘的线路的联票。联票价格低于分别购票。

单线票价和联合票价如 price.txt 所示。

线1 180
.....
线13 114
线1,线2 350
线1,线10 390
.....


每行数据表示一种票价
线名与票价间用空格分开。如果是联票,线名间用逗号分开。
联票只能包含两条可换乘的线路。

现在的问题是:根据这些已知的数据,计算从A站到B站最小花费和可行的换乘方案。

比如,对于本题目给出的示例数据

如果用户输入:
五棵松,奥体中心

程序应该输出:
-(线1,线10)-线8 = 565

如果用户输入:
五棵松,霍营

程序应该输出:
-线1-(线4,线13) = 440

可以看出,用户输入的数据是:起始站,终到站,用逗号分开。
程序输出了购票方案,在括号中的表示联票,短横线(-)用来分开乘车次序。
等号后输出的是该方案的花费数值。


请编程解决上述问题。
注意:
1. 我们测试您的程序时,所用数据与题目中的示例数据不同,但格式完全一样。
2. 当多个方案有相同的最小花费,输出任意一个方案即可。



要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;
不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。


文件price.txt内容如下:
线1 180
线2 250
线4 160
线5 270
线8 175
线10 226
线13 114
线1,线2 350
线1,线10 390
线1,线5 410
线1,线4 330
线10,线13 310
线2,线5 390
线4,线10 370
线4,线13 260

文件station.txt内容如下:
线1
苹果园
古城路
八角游乐园
八宝山
玉泉路
五棵松
万寿路
公主坟
军事博物馆
木樨地
南礼士路
复兴门
西单
天安门西
天安门东
王府井
东单
建国门
永安里
国贸
大望路
四惠
四惠东

线2
西直门
车公庄
阜成门
复兴门
长椿街
宣武门
和平门
前 门
崇文门
北京站
建国门
朝阳门
东四十条
东直门
雍和宫
安定门
鼓楼大街
积水潭

线4
公益西桥
角门西
马家堡
北京南站
陶然亭
菜市口
宣武门
西单
灵境胡同
西四
平安里
新街口
西直门
动物园
国家图书馆
魏公村
人民大学
海淀黄庄
中关村
北京大学东门
圆明园
西苑
北宫门
安河桥北

线5
天通苑北
天通苑
天通苑南
立水桥
立水桥南
北苑路北
大屯路东
惠新西街北口
惠新西街南口
和平西桥
和平里北街
雍和宫
北新桥
张自忠路
东四
灯市口
东单
崇文门
磁器口
天坛东门
蒲黄榆
刘家窑
宋家庄

线8
森林公园南门
奥林匹克公园
奥体中心
北土城

线10
巴沟
苏州街
海淀黄庄
知春里
知春路
西土城
牡丹园
健德门
北土城
安贞门
惠新西街南口
芍药居
太阳宫
三元桥
亮马桥
农业展览馆
团结湖
呼家楼
金台夕照
国贸
双井
劲松

线13
西直门
大钟寺
知春路
五道口
上地
西二旗
龙泽
回龙观
霍营
立水桥
北苑
望京西
芍药居
光熙门
柳芳
东直门
...全文
433 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2013-04-18
  • 打赏
  • 举报
回复
用一张票能坐到的站点之间连边,建图。然后做最短路。
gukuitian 2013-04-18
  • 打赏
  • 举报
回复
北京地铁要涨价吗?难道是内幕
  • 打赏
  • 举报
回复
最短路径么?

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧