题目:
已知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",