• 第二阶段冲刺第四天


    import com.example.myapplication.Bean.Bean;
    
    import java.util.ArrayList;
    
    /**
     * @author:created By ZhangHao
     * 时间:2019/5/31 09
     * 邮箱:188660586@qq.com
     */
    public class Djstl {
    
        private String[] mVexs;       // 顶点集合
        private int[][] mMatrixs;    // 邻接矩阵
        private static final int INF = Integer.MAX_VALUE; // 最大值
    
       public Djstl(){}
       public Djstl(String[] vexs, int[][] matrix){
    // 初始化顶点数和边数
           int vlen = vexs.length;
           mVexs = new String[vlen];
    
           for (int i = 0; i < mVexs.length; i++) {
               mVexs[i] = vexs[i];
           }
    
           mMatrixs = new int[vlen][vlen];
           for (int i = 0; i < vlen; i++)
               for (int j = 0; j < vlen; j++)
                   mMatrixs[i][j] = matrix[i][j];
    
    
    
       }
    
        /*
         * Dijkstra最短路径。
         * 即,统计图中"顶点vs"到其它各个顶点的最短路径。
         *
         * 参数说明:
         *       vs -- 起始顶点(start vertex)。即计算"顶点vs"到其它顶点的最短路径。
         *     prev -- 前驱顶点数组。即,prev[i]的值是"顶点vs"到"顶点i"的最短路径所经历的全部顶点中,位于"顶点i"之前的那个顶点。
         *     dist -- 长度数组。即,dist[i]是"顶点vs"到"顶点i"的最短路径的长度。
         */
    
        public ArrayList<Object> floyd(int[][] path, int[][] dist, String []s, String site1, String site2) {
            int indexofsite1 = 0;
            int indexofsite2=0;
            ArrayList<Object> list = new ArrayList<>();
            String temp="";
    
            // 初始化
            for (int i = 0; i < mVexs.length; i++) {
                for (int j = 0; j < mVexs.length; j++) {
                    dist[i][j] = mMatrixs[i][j];
                    path[i][j] = j;
                }
            }
            // 计算最短路径
            for (int k = 0; k < mVexs.length; k++) {
                for (int i = 0; i < mVexs.length; i++) {
                    for (int j = 0; j < mVexs.length; j++) {
                        // 如果经过下标为k顶点路径比原两点间路径更短,则更新dist[i][j]和path[i][j]
                        int tmp = (dist[i][k] == INF || dist[k][j] == INF) ? INF : (dist[i][k] + dist[k][j]);
                        if (dist[i][j] > tmp) {
                            // "i到j最短路径"对应的值设,为更小的一个(即经过k)
                            dist[i][j] = tmp;
                            // "i到j最短路径"对应的路径,经过k
                            path[i][j] = path[i][k];
    
                        }
                    }
                }
            }
            for(int i=0;i<s.length;i++) {
                indexofsite1=i;
                if(s[i].equals(site1))  break;
    
            }
            for(int i=0;i<s.length;i++) {
                indexofsite2=i;
                if(s[i].equals(site2))  break;
    
            }
            System.out.println(site1+"-->"+site2);
            System.out.println("distance:"+dist[indexofsite1][indexofsite2]);
    
    
            System.out.print(s[indexofsite1]+"-->");
            while(!s[path[indexofsite1][indexofsite2]].equals(site2)) {
                Bean bean = new Bean();
                temp=s[path[indexofsite1][indexofsite2]];
                bean.setSiteName(s[path[indexofsite1][indexofsite2]]);
                System.out.print(s[path[indexofsite1][indexofsite2]]+"-->");
                indexofsite1=path[indexofsite1][indexofsite2];
                list.add(bean);
            }
            Bean bean1=new Bean();
            bean1.setSiteName(s[indexofsite2]);
            System.out.print(s[indexofsite2]);
            list.add(bean1);
            list.add(dist[indexofsite1][indexofsite2]);
            return list;
        }
    
    }
  • 相关阅读:
    Git代码行数统计命令
    JPA访问数据库的几种方式
    爱码小士丨代码一敲十年,收入虽高前途摇摆
    “肉瘾”女孩从软件测试工程师到主管的成长感悟
    华为测试大牛Python+Django接口自动化怎么写的?
    携程大牛的单元测试是怎么样写的?
    Jmeter参数的AES加密使用
    弄啥嘞?热爱你的Bug
    “进腾讯工作一个月,我想辞职了”
    我在华为,软件测试人员在工作中如何运用Linux?
  • 原文地址:https://www.cnblogs.com/zhang188660586/p/11061957.html
Copyright © 2020-2023  润新知