北京地铁线路查询

北京地铁线路查询

 

这次作业我主要是参与了增加输入输出,学习并修改广度遍历的函数,优化错误反馈信息的操作。

一、github链接:

https://github.com/standandby/BJsubway
二、基本需求
    1.获取所以的站点信息
输入格式为 java -map subway.txt
    2.获取北京地铁单条线路上的所以站点
输入为 java -a 线路名称 -map subway.txt -o line.txt 
    3.获取两个站点之间的最短路线
输入为 java -b 站点名 站点名 -map subway.txt-o station.txt

三、文件导入

附一张北京地铁的线路图:

北京地铁线路查询_第1张图片
  subway.txt的内容样例如下所示:

北京地铁线路查询_第2张图片

导入代码如下

public static void readFile() {   //读取地铁线路图信息
        File file = new File(readFile);
        BufferedReader reader = null;

        try {
            InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "UTF-8");
            reader = new BufferedReader(inputStreamReader);
            String line = null;
            String linename = "1";
            while ((line = reader.readLine()) != null) {
                if (line.trim().startsWith("*")) {
                    String[] lineInfo = line.substring(1).split("-");
                    lineSet.add(getLine(lineInfo[1].trim(), lineInfo[0].trim()));
                }
            }
        } catch (IOException e) {e.printStackTrace();} 
finally {} }

 

导入完成后是将指定位置的subway.txt导入到程序文件中


四、主要函数
这里的主要函数就是求最短路径的具体函数,本来是想用Dijkstra算法,参考了网上的代码,但都不怎么合适,最后还是改用了广度优先算法来写,勉强算满足要求,具体代码如下:

private void BFS(Graph g, Station gg) {
//查找最短路径 Queue
queue = new LinkedList<>(); visitedV.add(gg);//设置起始站点,即输入的站点 queue.add(gg);//将站点入栈 while (false == queue.isEmpty()) { Station ver = queue.poll(); List toBeVisitedV = g.getV_edgeList_map().get(ver); for (Station v : toBeVisitedV) { if (false == visitedV.contains(v)) { visitedV.add(v); path.put(v, ver); queue.add(v); } } } }

 



五、测试样例

1.存在的线路输出
java -a 1号线 -map subway.txt -o station.txt
输出结果:
北京地铁线路查询_第3张图片
2.邻接站点之间的最短距离
java -b 苹果园 古城 -map subway.txt -o line.txt
输出为:


3.较远站点之间(含转线)的最短距离
java -b 站点名 站点名 -map subway.txt -o line.txt

输出结果:

北京地铁线路查询_第4张图片




六、异常处理
1.输入的线路不存在,输出“线路不存在”
2.输入的站点不存在,输出“站点不存在”
3.输入的站点相同,输出“站点相同”
4.输入命令格式或名称错误,输出“格式/名称错误”

总结
本次实验的难点主要就是最短路径的计算,因为我基础比较差,所以花了很多时间去学习,导致花在工程上的时间不够多,质量有待提高,以后要更好的去规划时间。

你可能感兴趣的:(北京地铁线路查询)