华为机试题--高铁换乘(Floyed算法)

该博客介绍了如何运用Floyd算法解决华为机试中的一道题目,即找出在两条地铁线路间从任意起点到终点的最少换乘站数。题目涉及的地铁线包括一条环线和一条东西向线路,换乘点为T1和T2。通过建立相邻站点间的权值并进行三重循环计算,实现了寻找最短路径的解决方案,算法的时间复杂度为O(n^3)。
摘要由CSDN通过智能技术生成

题目:
已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:
A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线B(直线)经过车站:
B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15

本题可用Floyed算法解决。先求出每相邻两点的权值(这里是1,因为相邻的站就相差1个站),然后穷举所有点,若存在点k使距离(i,k)+距离(k,j)<距离(i,j),则更新距离(i,j)。
因此这里用到一个三重循环,时间复杂度O(n^3)。

附上代码:

#include<stdio.h>
#include<string.h>

const char line1[21][4] = { "A1","A2","A3","A4", "A5","A6", "A7","A8", "A9","T1", "A10","A11", "A12","A13", "T2","A14", 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值