北京地铁出行规划

一、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”并结束程序

测试样例
  添加参数:

  

  运行结果:

  

  查看两个站点最短路径:

  

  

  特定线路的情况:

  

  

   
六、个人总结
  本次个人作业,花费时间大约三天,中间出了各种稀奇古怪的错误,其实归根到底还是对于自己写的代码,太过杂乱,自己都里不清楚,模块化有所欠缺,类缺少内聚,类的独立性还不够好,希望在小组作业中能够多多改善,避免诸如此类的错误。

原文地址:https://www.cnblogs.com/zhuwenjian/p/11667444.html

时间: 2024-08-30 11:54:47

北京地铁出行规划的相关文章

北京地铁出行线路规划——代码实现

项目概述 根据输入的出发站和终点站推荐最短路线,显示搭乘线路及经过站点 采用Dijkstra算法,采用HashMap作为主要数据存取结构 运行结果:       代码分析  txt文件用空格分隔,先存储在LinkedHashSet中 public class Data { public static LinkedHashSet<List<Station>> lineSet = new LinkedHashSet<>();//List<Station>集合 p

北京地铁线路规划

北京地铁线路规划 任务 个人项目的主要任务就是通过地铁出行的人能够通过该软件很快找到最快到达目的地的出行线路规划. 项目需求 用户根据-map参数来获得所有北京地铁线路信息 java subway -map subway.txt 那么这里的重点就在于如何存储这个subway.txt文件了,首先我们还是看一张北京地铁1号线的图 ![](https://img2018.cnblogs.com/blog/1806411/201909/1806411-20190922113916097-18761194

个人项目--北京地铁线路规划(已完成)

一.任务: 实现一个帮助进行北京地铁出行路线规划的命令行程序. 二.需求分析及实现 需求1 在程序启动时,自动获取到地图信息 需要实现一个支持自动加载subway.txt 文件的程序 需求2 查询指定地铁线经过的站点 在应用程序上,需要支持一个新的命令行参数  -a ,指定用户希望查询的地铁线路. 在给定地铁线路时,程序需要从线路的起始站点开始,依次输出该地铁线经过的所有站点,直到终点站.输出的文件使用-o参数来指定. 一个调用应用程序的示例如下: java subway -a 1号线 -map

地铁出行规划项目分析

地铁出行规划项目分析 基本理解 本次个人项目是实现一个帮助进行地铁出行线路规划的命令行程序,在程序开始需要导入地铁线路图,然后有查询相关线路信息和经过最少站点到达目的地的功能,由于在本项目中可以忽略站点间距离所以可以将所有站点间距离设为一. 设计思路 1.线路信息存放格式 “线路名称 站点名称 能否换乘”,三者以空格分开,每个站点占一行,线路之间以换行符区分,并且以每条线路站点的相应顺序存放.若一个站点有换乘路线则“能否换乘”为所有可换乘线路名称,并以逗号分隔所有线路:若一个站点没有换乘路线则“

地铁出行规划

layout: post title: "软件工程 地铁出行规划" date: 2019-09-18 8:41 comments: false tags: 软工 申明:本题取自博客园 题目重述 本题任务 实现一个帮助进行地铁出行路线规划的命令行程序. 题目要求 使用Visual Studio Community 2019 或 IDEA 进行开发,采用C++, C# 或 Java 语言实现,运行环境为64-bit Windows 10. 提交的代码要求经过Code Quality Ana

北京地铁出行线路规划——个人项目

项目地址 详见: 一.基本功能 获取地铁线路图. 以参数 -map 作为标志,来获得对应的自定义地铁线路图信息文件(命名为 Subway.txt).输入格式如: java Subway -map Subway.txt 获取指定地铁线路. 以参数 -a 作为标志,并输入指定地铁线路,输出的文件以参数 -o 来指定.从线路的起始站点开始,依次输出该地铁线经过的所有站点,直到终点站.输入格式如: java Subway -a 1号线 -map Subway.txt -o Station.txt 输入起

个人项目——北京地铁线路规划

一.前言 现实和理想的差距总是那么大,在过程中碰到的坑比预期的还多(说那么多,其实就是自己菜),过程中复习了淡忘已久的许多算法和数据结构,一边深刻的体会着自己是多菜,一边也体会到了自身一点点微小的进步,大概. 二.项目简介 实现北京地铁查询功能 附上一张北京地铁的图: 三.项目地址 https://github.com/fireworks-EX/MetroLinePlanning 四.需求分析 1.确定储存及读取地铁线路数据文件的格式 2.支持用户输入的地铁线路的查询 3.提供用户指定两站点间的

北京地铁出行线路规划

参考 https://www.cnblogs.com/myp123/p/11669391.html https://www.cnblogs.com/xupppp/p/11663525.html 项目介绍 规划 https://www.cnblogs.com/RittLiii/p/11570168.html Github 实现语言 java 主要算法 Dijkstra 类 Main 程序入口,进行输入操作,判断输入 Station model类,储存站点信息 Routine model类,储存地铁

北京地铁出行路线规划设计

一.需求分析 根据题意,需要做到以下几点: 1.可以判断命令行输入的参数并执行相应的操作 2.可以读入地图信息 3.用户可以读取某一地铁线路从起始站到终点站的全部信息 4.用户写入起始站和终点站,规划出正确的路线并告知用户路线 5.能对于用户的不正确输入加以判断并提示 二.设计思路 1.考虑到每个站点会有很多属性,故采用java类的形式进行编程 2.要寻找最短路径问题,则采用dijkstra算法 3.给每条线路id方便运算 三.预计的具体实现(可能后续会作修改)   1.地图导入格式:用文本文件