首页 > 其他分享 >3.16双人总结

3.16双人总结

时间:2023-03-16 22:56:51浏览次数:48  
标签:总结 get int stations System 3.16 station 双人 out

铁路查询系统的最短路径算法(迪杰斯特拉算法)———————目前尚有bug(溢出的问题)

 int startId = findStationIndex(station1);

        int endId = findStationIndex(station2);

        List<TotalStation_plus> list = new ArrayList<>();

 

        for (int i = 1; i <= 2; i++) {

            List<TotalStation_plus> temp = webmapper.research3(i);

            AddStation(temp);

 

        }

        int[] visit = new int[Max];

        int dis=Dijkstra(startId,endId,edges,visit,pre);

        List<String> station=PrintPath(startId,endId);

 

        return station;

    }

 

    public static void AddStation(List<TotalStation_plus> temp) {

        String[] tokens = new String[20];

        //将temp集合里的数据存到字符串数组里

        for (int i = 0; i < 17; i++) {

            tokens[i] = String.valueOf(temp.get(i));

        }

        //取出线路号

        String lineName = tokens[1];

        //将一条线存入stations里

        for (int i = 2; i < tokens.length; i++) {

            //先搜索list中是否存在该站点名称,则只添加线路和相邻节点(去重)

            boolean t = false;  //判断是否存在arraylist中

            for (int j = 0; j < stations.size() - 1; j++) {

                if (stations.get(j).getStationName().equals(tokens[i])) {

                    stations.get(j).addLineName(lineName);

                    station a = new station();

                    a.setName(tokens[i + 1]);

                    a.addLineName(lineName);

                    stations.add(a);

                    t = true;

                    break;

                }

            }

            if (t == false) {

                station a = new station();

                a.setName(tokens[i]);

                a.addLineName(lineName);

                stations.add(a);

            }

 

        }

        //添加相邻站点

        for (int i = 1; i < tokens.length - 1; i++) {

            ADDAdjacentStations(tokens[i], tokens[i + 1]);

        }

    }

 

    public static void ADDAdjacentStations(String name1, String name2) {

        station t1 = findStation(name1);

        station t2 = findStation(name2);

        if (t1 != null && t2 != null) {

            t1.addAdjacentStations(t2);

            t2.addAdjacentStations(t1);

            int x = findStationIndex(name1);

            int y = findStationIndex(name2);

            edges[x][y] = 1;

            edges[y][x] = 1;

        } else {

            //System.out.println("未找到该名称的站点!!!");        }

    }

 

    //找到节点

    public static station findStation(String name) {

        station aStation = null;

        for (int i = 0; i < stations.size() - 1; i++) {

            if (stations.get(i).getStationName().equals(name)) {

                aStation = stations.get(i);

                return aStation;

            }

        }

        //System.out.println("未找到该名称的站点!!!");

        return aStation;

    }

 

    //找到节点下标

    public static int findStationIndex(String name) {

        int index = -1;

        for (int i = 0; i < stations.size() - 1; i++) {

            if (stations.get(i).getStationName().equals(name)) {

                return i;

            }

        }

        //System.out.println("未找到该名称的站点!!!");

        return index;

    }

 

    public static int Dijkstra(int startId, int endId, int[][] graph, int[] visit, int[] pre) {

        //节点个数

        int n = graph.length;

        PriorityQueue<Node> pq = new PriorityQueue<>(new Node());

        //将起点加入pq

        pq.add(new Node(startId, 0));

        while (!pq.isEmpty()) {

            Node t = pq.poll();

            //当前节点是终点,即可返回最短路径

            if (t.node == endId)

                return t.cost;

            //t节点表示还未访问

            if (visit[t.node] == 0) {

                //将节点设置为已访问

                visit[t.node] = -1;

                //将当前节点相连且未访问的节点遍历

                for (int i = 0; i < n; i++) {

                    if (graph[t.node][i] != 0 && visit[i] == 0) {

                        pq.add(new Node(i, t.cost + graph[t.node][i]));

                        pre[i] = t.node;

                    }

                }

            }

        }

        return -1;

    }

 

    //打印路径

    public static List<String > PrintPath(int startId, int endId) {

        List<String> station=new ArrayList<>();

        Stack<Integer> Path = new Stack<Integer>();

        int end = endId;

        //前置节点入栈,使得输出时候为正序

        while (endId != startId) {

            Path.add(endId);

            int temp = pre[endId];

            endId = temp;

        }//        String routine="";

        String lineString = "";

        String nextLineString = "";

 

        lineString = IsinOneLine(stations.get(startId), stations.get(Path.peek()));

        System.out.println(stations.get(startId).getStationName() + lineString);

        int i;

        while (true) {

            i = Path.pop();

            if (Path.isEmpty()) break;

            nextLineString = IsinOneLine(stations.get(i), stations.get(Path.peek()));

            //判断是否换线

            if (nextLineString.equals(lineString)) {

                //不换线

                System.out.print("   ");

                System.out.print("------->");

                System.out.println(stations.get(i).getStationName());

                station.add(stations.get(i).getStationName());

 

            } else {

                //换线

                lineString = nextLineString;

                System.out.print("   ");

                System.out.print("------->");

                System.out.println(stations.get(i).getStationName());

                System.out.println("在 " + stations.get(i).getStationName() + " 换乘 " + lineString);

                station.add(stations.get(i).getStationName() + " 换乘 " + lineString);

            }

        }

        System.out.print("   ");

        System.out.print("------->");

        System.out.println(stations.get(end).getStationName());

        station.add(stations.get(end).getStationName());

        return  station;

    }

 

    //判断是否在同一线路上,如果是就返回线路,否则返回null

    public static String IsinOneLine(station a, station b) {

        for (int i = 0; i < a.getLineName().size(); i++) {

            for (int j = 0; j < b.getLineName().size(); j++) {

                if (a.getLineName().get(i).equals(b.getLineName().get(j))) {

                    return a.getLineName().get(i);

                }

            }

        }

        return null;

    }

 

 

标签:总结,get,int,stations,System,3.16,station,双人,out
From: https://www.cnblogs.com/jy-all-bug/p/17224548.html

相关文章

  • 地铁查询系统【双人合作项目】
    today对于web版地铁查询系统的制作我们分析了基本的结构以及要准备的东西,包括连通表和站点信息表,地铁线路图,因为北京地铁线路比较多,所以我们准备先用石家庄三条地铁线做......
  • 3.16学习总结
    2.3.3Button(按钮)与ImageButton(图像按钮)分类 Android基础入门教程本节引言:今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮......
  • 3-16总结
    今天对于编程的学习还是比较少的,对于第一次结对任务的思路是有了,但是比较重要的是我们对于编程不太行。然后明天想温习一下。 ......
  • 3.16每日总结
       今天学习了2h,从零开始学安卓(代码写的过于抽象除了界面能运行,报错实在是太多了)。今天学习了SQL语句的基本语法和sqlite的基本内容SELECT -从数据库中提取数据......
  • Vue.js 总结Vue监视数据
    视频<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"/> <title>总结数据监视</title> <style> button{ margin-top:10px; } </style> <!--......
  • 2023.3.16每日总结
    packagecom.example.myapplication;importandroidx.appcompat.app.AppCompatActivity;importandroid.annotation.SuppressLint;importandroid.content.Intent;i......
  • AS学习日记23.3.16
    今天学习了侧滑界面制作的布局文件写法和java文件的写法,准备之后学跳转实现学习了view和viewgroup了解了安卓中的六大布局:LinearLayout(线性布局),RelativeLayout(相对布......
  • 每日总结-23.3.16
    小眼睛代码ImageVieweye1;//定义控件eye1=findViewById(R.id.eye1);//绑定控件eye1.setImageResource(R.drawable.baseline_remove_red_eye_2......
  • 每日总结 3.16
    今天学习时长没有昨天长,上午工程数学,学习了如何求函数的梯度和海森矩阵的求法,和一些其他的矩阵,并且了解了一种简单的算法,下午体育课高强度运动,进行了激烈的足球对抗,增强了......
  • 2023.3.16结对总结
    今天进行了地铁Javaweb的数据库链接查询类的完成为了完成查询的操作,复习了list集合 ......