结对编程作业(最短地铁路径规划)

本秂侑毒 提交于 2019-12-03 12:13:27

一,需求分析

  1.任务:

  实现一个帮助进行天津地铁出行路线规划的命令行程序。

    主要功能包括:

      a.输入 java subway -map subway.txt 要能让程序读入准备的源数据。

      b.输入java subway -a 1号线 -map subway.txt -o station.txt要能查出该条地铁线包含的站并保存在station.txt中。

      c.输入subway.exe -b 洪湖里 复兴路 -map subway.txt -o routine.txt要能查出两站的最短路径,并保存在 routine.txt中(路径中要包含换乘信息)。

  2.PSP

  

二,软件的设计及算法思想实现

  1.源数据结构说明

    

 

 

     说明:以*.txt文件存储源数据,每一行代表的是一条线上所有站的信息,其中每一个站用空格隔开,而每一行的第一个数据代表的是该条地铁线的地铁名。

   这样存储的好处是可以一次性读完所有的数据,而因为所求地铁不带权,因此只需要读到信息即可!

  2.实体类属性说明

    博主自定义了2个实体类(Station与Line)

    Station包含的信息如下: 

    String name:主要存储的是地铁的名字。    boolean visited:用于BFS算法中需要用到的标记,代表是否访问。    String preStation:BFS回退求路径需要的一个备忘录。    String line:初始为空,当BFS算法求出一条最短路径后,需要计算此条路径下的某个站属于的地铁线。    List<String> lineNow = new ArrayList<String>():地铁站初始属于的地铁线,可能只有一个,也可能多个,    List<Station> nextStation = new ArrayList<Station>():相邻地铁的信息,即下一次能到达的所有地铁。当某线的开始站和结束站存储为1,其他的为2*n.    Line包含的信息如下:
    int id:地铁的标记,不重要     String name:地铁的名字    List<String> stations = new ArrayList<>():某条地铁存储的所有站  3.关键类(Solve)实现及算法思想:        public void getSubwayMessage():负责读入*.txt的源数据
    public void getStationByLine(String linename):传入参数是一个地铁线名,获得整个地铁线的地铁站      private void BFS(String st, String ed):传入参数 开始的地铁站,结束的地铁站  BFS参考的是 严蔚敏版<<数据结构>> 170页的BFS算法    public List calPassStations(String st, String ed):传入参数 开始的地铁站,结束的地铁站 这个是在BFS后的改进,在加入备忘录后,通过最后一个站回退到初始站,因此能找出这个最短路径,用列表List返回。
    public void  getChangeInfo(List<String> list):传入参数 最短路径的列表 加入最短路径的中所有Station,计算出当前Station的所属线,即Station.line
    public void  output(List<String> list)传入参数 最短路径的列表 这时候所有的站都被我们计算过所属站,功能主要是计算换乘信息存入 routine.txt    4.项目目录展示  三.测试效果与运行  等补四.打包,作业测试及提交  1.测试功能要求1  2.  3.源码下载Github下载地址:https://github.com/Bettetman/ShortDis.git    五.总结  1.爬坑过程中,多次用到像list1=list2的语句赋值,但是测试发现达不到想要的效果,即在编程的过程中,我们很容易把对象的引用指向宁外一个对象,但是这个过程和基础数据有很大的不同,原因是,list1=list2二者指向的是内存的同一对象,因此不管是list1还是list2操作都会改变   原来内存中的对象.   2.项目的不足:时间精力有限,算法的实现有点粗糙,并且用BFS实现的算法复杂度较高,而BFS本身带的算法会存在一个不足,那就是当 A站->B站 所有的路径只会存在一条,而同时存在多条路径时,这个问题难免不应该让我们忽略.  

 

 

  
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!