地铁出行路线规划实现

地铁出行路线规划

简述

语言:java 编程工具:eclipse 编码格式:utf-8
本次实验函数通过邻接矩阵保存txt文件读入的站点路径信息,使用广度优先遍历求出最短路径
本次实验函数功能包括查询站点信息,查询线路信息,查询最短路径。

程序主体

1.建图

    public int v;
    public LinkedList<Integer> adj[];
    public Graph(int v){
    this.v = v;
    adj = new LinkedList[v];
        for(int i=0; i<v; ++i) {
            adj[i] = new LinkedList<>();
        }
    }
    public void addEdge(int s,int t) {
        adj[s].add(t);
        adj[t].add(s);
    }

建一个v个顶点的无向图,并使用addEdge向邻接矩阵中添加边。

2.最短路径算法

    int v=graph.getV();
    LinkedList<Integer>[] adj=graph.getAdj();
    boolean[] visited = new boolean[v];
    visited[s] = true;
    Queue<Integer> queue = new LinkedList<>();
    queue.add(s);
    int[] prev = new int[v];
    for(int i=0; i<v;i++) {
        prev[i] = -1;
    }
    while(queue.size() != 0) {
        int w =queue.poll();
        for(int i=0; i<adj[w].size();++i) {
            int q = adj[w].get(i);
            while(!visited[q]) {
                prev[q] = w;
                if(q == t) {
                    print(prev,s,t);
                    return;
                }
                visited[q] = true;
                queue.add(q);
            }
        }
    }

通过广度优先算法计算最短路径。

3.初始化

    File file = new File("C:\\Users\\lqz\\Desktop\\站点名称.txt");
    InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
    BufferedReader br = new BufferedReader(reader);
    String line = "";
    line = br.readLine();
    while (line != null) {
        station_name.add(line);
        line = br.readLine();
    }
    File file = new File("C:\\Users\\lqz\\Desktop\\站点信息.txt");
    InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
    BufferedReader br = new BufferedReader(reader);
    String line = "";
    line = br.readLine();
    while (line != null) {
        String[] sArray=line.split("\\|");
        lstation_name.add(sArray[0]);
        lline_name.add(sArray[1]);
        lstation_num.add(sArray[2]);
        }
        line = br.readLine();
    }      

首先先将所有站点保存在一个list里,方便建图和查询。然后根据 站点名|线路号|站点序号(站点在该线路上的序号)保存路径,并且将每条线路保存在一个list里方便查询。

运行结果

1.查询站点

    searchstation("苹果园");

苹果园:
1号线
6号线

    searchstation("苹果");

苹果:
站点不存在

2.查询线路

    searchline("大兴");

大兴号线: [公益西桥, 新宫, 西红门, 高米店北, 高米店南, 枣园, 清源路, 黄村西大街, 黄村火车站, 义和庄, 生物医药基地, 天宫院]

    searchline("大");

大号线: 线路不存在

3.查询路径

    new BFS().bfs(search("大井"),search("望京"),graph);

大井->七里庄(换乘9号线)->六里桥->六里桥东->北京西站->军事博物馆->白堆子->白石桥南(换乘6号线)->车公庄西->车公庄(换乘2号线)->西直门->积水潭->鼓楼大街->安定门->雍和宫->东直门(换乘13号线)->柳芳->光熙门->芍药居->望京西(换乘15号线)->望京
共21站

    new BFS().bfs(search("大井"),search("大井"),graph);

两站点相同

    new BFS().bfs(search("大井"),search("100"),graph);

大 站点不存在

总结

在写地铁函数前要先确定建图的方法,建图需要输入哪些数据,怎样判断输入的站点间是否存在边等问题。如果没有仔细思考就会和刚开始构思的想法不一致。所以在写函数之前应该先构思大概的方案,以及可能会遇到的问题和解决问题的方法。

github:https://github.com/laoqizheng/-

猜你喜欢

转载自www.cnblogs.com/31701012lqz/p/11674907.html
今日推荐