标签:异常 bsp jar link init 功能 ini static 实现
一、Github代码链接
repo
二、程序基本功能描述
1.获得北京地铁单条线路所有站点信息
java SubwayStart -a 线路名称 -map 地铁线路文件.txt-o 输出文件.txt 或者 java SubwayStart -a 线路名称(直接显示) -map 地铁线路文件.txt
2.获得两个站点间最短线路
java SubwayStart -b 起始站点 目的站点 -map 地铁线路文件.txt -o 输出文件.txt
或者
java SubwayStart -b 起始站点 目的站点 -map 地铁线路文件.txt (直接显示)
3.获得图的基本信息
java SubwayStart -map 地铁线路文件.txt
4.帮助,命令行详解
java SubwayStart -help
三、北京地铁线路存储格式
线路以文本文件形式存放,具体格式如下:
{
‘Line‘ : ‘线路名称‘,
‘Station‘ : [‘站点1‘, ‘站点2‘, ‘站点3, ......]
},......
其中环形线路,头站点在尾部再加上首站点即可。
对于读取通过json格式读取,添加了一个jar包,在项目的lib下:名字为fastjson-1.2.53.jar
四、代码设计:
1.类的设计
总共有6各类:
Station站点类,Graph图类(图的相关操作),Algorithm算法类(是个接口,表示算法类应该实现的一些方法),
BroadFristSearchAlgorithm算法类(BFS具体实现),Main类(json读取,数据处理等操作),subwayStart类(程序入口)
Station类结构主要成员
public class Station {
private final static int infinite_dis = Integer.MAX_VALUE;
private String name; //地铁站名字
private boolean known; //此节点之前是否已知
private int adjuDist; //此节点距离
private Station parent; //当前从初始节点到此节点的最短路径下的父节点。
public String Line;//地铁站归属线路
}
Graph类结构主要成员(因为站点间距离都相同,就可以少写一个Edge类,以邻接表形式存储)
public class Graph{
private List<Station> StationList; //图的顶点集
private Map<Station, List<Station>> ver_edgeList_map= new HashMap<>(); //图的每个顶点对应的有向边
private Station firstVertax;//起始点
private Algorithm algorithm;//对应的算法
}
核心算法:BFS算法:
private void BFS(Graph g, Station sourceVertex) {
Queue<Station> queue = new LinkedList<>();
// 标记起点
visitedVertex.add(sourceVertex);
// 起点入列
queue.add(sourceVertex);
while (false == queue.isEmpty()) {
Station ver = queue.poll();
List<Station> toBeVisitedVertex = g.getVer_edgeList_map().get(ver);
for (Station v : toBeVisitedVertex) {
if (false == visitedVertex.contains(v)) {
visitedVertex.add(v);
path.put(v, ver);
queue.add(v);
}
}
}
}
换乘判断
返回一个最短路径上的所有站点的栈,只需判断弹出来的Station的Line与弹出来后当前栈顶Station的Line是否一样,不一样就表示下一个站换线了。
具体代码:
while (!result.isEmpty()) {
Station sta=result.pop();
if(result.size()>=2&&!result.peek().Line.equals(sta.Line)) {
resultstring+=(sta.getName()+"\n"+result.peek().Line+"\n");
}
else
resultstring+=sta.getName()+"\n";
}
return resultstring;
五、异常处理:
1.地铁线路图数据txt不存在,处理方式:输出cant find xxx.txt并结束程序
2.起点站或终点站不存在,处理方式:程序输出“站点不存在”并结束程序
3.起点终点相同,处理方式:程序输出“开始站点和结束站点相同并结束程序
4.输入参数格式错误,处理方式:程序输出“参数错误,用法参考--help”并结束程序
测试样例
添加参数:

运行结果:

查看两个站点最短路径:


特定线路的情况:


六、个人总结
本次个人作业,花费时间大约三天,中间出了各种稀奇古怪的错误,其实归根到底还是对于自己写的代码,太过杂乱,自己都里不清楚,模块化有所欠缺,类缺少内聚,类的独立性还不够好,希望在小组作业中能够多多改善,避免诸如此类的错误。
标签:异常 bsp jar link init 功能 ini static 实现
原文地址:https://www.cnblogs.com/zhuwenjian/p/11667444.html