华为机试题, 换乘。抛砖引玉

题目如下:

已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。

地铁线 A (环线)经过车站: A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线 A (直线)经过车站: B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15

输入:输入两个不同的站名

输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次

该题网上有很多方案:从if+else到看不懂的代码  到 复杂大很高级的算法。如经典的最短路径(这里面有环,比较麻烦),图论算法。

参考: http://blog.csdn.net/xc889078/article/details/10805167

http://blog.csdn.net/hswangjiajia/article/details/21113647

这些算法都很好,不过感觉有点大才小用了。

首先,只有两班车。其次,也只有两个交叉点。


我提供一个简单的算法:(c/c++)

1 找到 T1,T2在 两条线路的位置,存下来。

2 找到站点1 和站点2 的位置 ;如果同列车,不需换乘,直接返回结果。

3 计算 站点1和站点2,分别到T1,T2的距离和,选出最小的就是最短路径了。

注意事项:1  距离可以通过计算路径上的空格符来标识。

还请大家多多指点。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值