PS:因为兴趣爱好,大学里做过许多类似的JAVA小程序,比如:词法识别器并输出简单多层嵌套的代码的执行“中间代码”(类似于JAVA编译产生的字节码),拼图游戏(九宫图求解)等等。其中觉得比较有代表性的算是这个了,所以拿出来分享一下,毕竟对于大三的我来说能独立做出来也是有点成就感吧。
根据某市地铁线路图写一个地铁票价计算程序
需求描述:
1.计费规则:最低2元,超过5站以上每站加收 0.5元,换乘重新起算,例如L1先坐4站,换乘L2再坐6站,结果就是2+2.5=5.5元
2.程序启动以后读取输入文件(in.txt),内容格式如:
L2-8,L2-2
X3,L3-8
….
每行表示一次行程,起点站和终点站之间用逗号分 隔,行数不限
3.系统按最短路径方案(尽量少换乘且站数少,假设乘 客换乘一次用的时间相当于坐4个站)规划路线,计算票价,并把路线和票价输出到文件(out.txt),内容格式如:
L2-8,L2-2=2.5:L2-8,L2-7,L2-6,L2-5,L2-4,L2-3,L2-2
X3,L3-8=4:X3,X4,L3-8
….
等号后面的表示票价和路径
地铁线路图如下:共有5条线路,X开头的站点表示 换乘车站
此次代码是在两年前(大三)面试时遇到的一个算法题所写的代码,里面很多命名不规范之处请包涵,大概说一下我的解决思路:在通过建立数据模型后,通过广度优先遍历遍历出所有两点间的路径,再通过算法求出在路径List中最优的路线。
1.数据模型–双向图
如下代码:
public class Road implements Cloneable {
public Road(){
}
public Road(String begin,String end) {
this.begin = begin;
this.end = end;
}
public Road(String begin,String end,int i) {
this.begin = end;
this.end = begin;
}
private String begin;
private String end;
public String toString() {
return begin + "->" + end;
}