标签:目标 性能测试 时间 collect epo 地址 poi 北京 是的
按要求编写博客,详细说明花费时间,代码,各个模块和测试用例
该文本直接保存进了各条线路的各个站点,没有在文本中考虑换乘点。当读入“一号线”等文字时,将它转换为线路的id号,然后在way数组中作为下标,将后面的各个站点的id号存储进去。换乘情况的话,因为每新读入一个站点,都会给它赋一个id号,所以只要每次判断该站点是否有id号了,如已存在,该站点就是换乘点,保存换乘信息。例如上图中一号线的西单,在四号线中也存在,所以该站点就可以换乘一号线或四号线。
共一个类:Subway Subway类共有六个函数:
public static void searchWay(String name, String args):该函数的目标是用来满足需求二,保存所查询线路的各个站点。name就是通过命令行输入的线路的名称,args就是保存信息的文件名称。
该函数先通过if语句判断来得到线路的id号,然后在way数组下得到各个站点的id号,然后根据id号调用getKey()函数得到站点名称,保存进文件中。
public static int findMinDist(int[] dist,int[] collected):该函数的作用是在未被收录的顶站中寻找dist最小的一个站点。
public static void dijkstra(String station1,String station2, String baocun):该函数的算法是采用了dijkstra算法,该算法是先利用上面的findMinDist函数找到距离起点最小的点,然后更新其他点到起点的距离。在更新的过程中,判断了某个站点是否是换乘点,如果是的话,就更新这条路的换乘次数,最后当路径长度一致时,根据换乘次数来选择是哪一条路径,当换乘次数也一致时,就两条路径都输出。判断某个站点是否是换乘点的方法是通过一个二重循环,一个一重循环;先通过二重循环找到当前站点和前一个站点在共同的哪一个线路上,再判断当前站点的前前站点是否在这条线路上,若不在,则说明前一个站点是换乘点,保存信息。
public static String getKey(int value):该函数的作用就是通过id号来得到站点的名称;
public static void shuchu(int[] dist,int[] path,int[][] exchange,int e,int s,int count,int[] changePoint, String baocun):该函数是用于将最短路径上所经过的站点和在哪个站点换乘几号线的信息保存到文件名问baocun的文件中去;先用wayTo这个数组保存整条路径,然后将wayTo这个数组里的id号和保存的换乘点的id号进行比较,如果该站点是换乘点,就在下一站输出前,输出需要换乘到几号线。
因为存在路径长度相同,换乘次数一样的情况,所以两条路径都需要输出,让乘客自主选择,所以会运行保存到文件的代码多次,所以我写了一个函数shuchu,这样只要多次调用一个函数,而不用多次书写同一份代码了。还有根据id号得到名称,也需要多次写同一份代码,所以变成一个函数,多次调用即可。
国贸 高碑店(一号线和八通线)
输了不存在的站点
这个项目采用java来完成,利用了dijkstra算法。并在原有的基础上进行了修改,在一边计算路径的情况下,一边判断是否换乘了,计算路径的换乘次数,然后选择路径短,换乘次数少的路径。 我写的代码没采用很复杂的方式,也是因为个人能力的不足,也深知还有很多更好的存储的方式,更方便,适宜的算法,但这次项目也进一步锻炼了我前期思考,准备,中期写代码,后期总结的能力。 这次数据的储存我主要采用了数组和map,通过数组来存储某条线路的站点,来存储某个站点可换乘的线路。通过map来存储站点的id号。
标签:目标 性能测试 时间 collect epo 地址 poi 北京 是的
原文地址:https://www.cnblogs.com/luolingjie/p/11666316.html