地铁线路规划

匿名 (未验证) 提交于 2019-12-03 00:14:01

[博客园]https://www.cnblogs.com/yuqiang31701023/
[GitHub]https://github.com/yuqiang1999/Subway

本次个人项目,我选择实现的编程语言是java,采用了eclipse编程工具实现。程序通过读取csv的数据文件来获得地铁线路数据,实现了地铁线路和站点的查询以及两站点之间最短路径的输出。
Personal Software Process Stages 时间
数据格式设计、数据输入 5h
类构件 1h
ui设计实现 2h
功能实现 12h
代码测试 2h
总结分析 1h
合计 23h

'''
public class FloydInGraph {

private static int INF=Integer.MAX_VALUE;         private int[][] dist;             private int[][] path;        private List<Integer> result=new ArrayList<Integer>();      public FloydInGraph(int size){   //构造函数       this.path=new int[size][size];          this.dist=new int[size][size];      }         public static void outPutroute(String start,String destination) {               Subway s = new Subway();     s.CreateGraph();     int[][] matrix = s.getGraph();       int begin=s.getIndex(start);          int end=s.getIndex(destination);     FloydInGraph graph=new FloydInGraph(500);       graph.findCheapestPath(begin,end,matrix);          List<Integer> list=graph.result;         System.out.println(s.getname(begin)+" to "+s.getname(end));          for(int i=0;i<list.size();i++) {         System.out.print(s.getname(list.get(i))+" ");         if(i>0 && i<list.size()-1) {             String l1 = s.getline_name(s.getAllStation().get(s.getIndex(s.getname(list.get(i-1)))).getName(), s.getAllStation().get(s.getIndex(s.getname(list.get(i)))).getName());             String l2 = s.getline_name(s.getAllStation().get(s.getIndex(s.getname(list.get(i)))).getName(), s.getAllStation().get(s.getIndex(s.getname(list.get(i+1)))).getName());             if(!(l1.equals(l2))) {                 System.out.print("(换乘"+l2+") ");             }         }     }     System.out.println();     System.out.println("经过站点数:"+graph.dist[begin][end]); }  public static String outroute(String start,String destination) {               String route = "";     Subway s = new Subway();     s.CreateGraph();     int[][] matrix = s.getGraph();       int begin=s.getIndex(start);          int end=s.getIndex(destination);     FloydInGraph graph=new FloydInGraph(500);       graph.findCheapestPath(begin,end,matrix);          List<Integer> list=graph.result;         route += s.getname(begin)+" to "+s.getname(end)+":";     route += '\n';     for(int i=0;i<list.size();i++) {         route += s.getname(list.get(i));         if(i>0 && i<list.size()-1) {             String l1 = s.getline_name(s.getAllStation().get(s.getIndex(s.getname(list.get(i-1)))).getName(), s.getAllStation().get(s.getIndex(s.getname(list.get(i)))).getName());             String l2 = s.getline_name(s.getAllStation().get(s.getIndex(s.getname(list.get(i)))).getName(), s.getAllStation().get(s.getIndex(s.getname(list.get(i+1)))).getName());             if(!(l1.equals(l2))) {                 route += "(换乘"+l2+") ";             }         }         if(i<list.size()-1)             route += "-->";     }     route += '\n';     route += "经过站点数:"+graph.dist[begin][end];     return route; }  public  void findCheapestPath(int begin,int end,int[][] matrix){          floyd(matrix);          result.add(begin);          findPath(begin,end);          result.add(end);      }            public void findPath(int i,int j){          int k=path[i][j];          if(k==-1)return;          findPath(i,k);   //递归       result.add(k);          findPath(k,j);      }      public  void floyd(int[][] matrix){          int size=matrix.length;          //initialize dist and path          for(int i=0;i<size;i++){              for(int j=0;j<size;j++){                  path[i][j]=-1;                  dist[i][j]=matrix[i][j];              }          }          for(int k=0;k<size;k++){              for(int i=0;i<size;i++){                  for(int j=0;j<size;j++){                      if(dist[i][k]!=500&&                          dist[k][j]!=500&&                          dist[i][k]+dist[k][j]<dist[i][j]){                          dist[i][j]=dist[i][k]+dist[k][j];                          path[i][j]=k;                      }                  }              }          }                }     

}
'''




本次项目的对于我最大的困难是数据的输入和图的建立。由于第一次读取csv数据,方法是从CSDN的一篇博文中学习的,加以修改运用。核心算法方面,重新学习了Floyd算法后,观摩优秀的代码后,得以实现。UI界面则是短学期的学习积累,对JSwing比较熟悉,因此较为简单的就可以实现。 这一次的个人项目让我知道自己所学的还是很少,一名程序员需要不停的学习他人的代码来更新自己的知识,不能坐井观天。继续努力吧。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!