zoukankan      html  css  js  c++  java
  • Dilkstra最短路径算法

    迪杰斯特拉算法(有向图)

    一、算法的大概流程:

      1.设一个点为出发点start点,然后先去寻找,这个start到其他点的最短的那个点,然后这个点便可以确定为0到此点最短点

        比如[0][1]=12  [0][2]=15  [0][3]=18  [0][4]=11  ,此时0到4的最短距离一定为11,因为,如果从别的路径经过肯定会大于这个11,所以这个最短路径是可以确定的

      2.然后将visited[0]和visited[4]进行标记,因为访问过了之后,还需要进行下一轮的比较,并且不再去这两个点访问

        并且比较从0->4->2和从0->2的距离进行比较,如果小的话,将0->4->2替代掉0->2的距离,一次类推将这一遍走完,然后这样又可以确定出一个最短的点的距离

      3.重复进行12

    二、代码如下

      

     1 public class Dilkstra2 {
     2     
     3      //自己手写的Dilkstra最短路径
     4      public static void main(String[] args){
     5         int M=10000;
     6         int [][] juzhen={
     7                 {0,7,M,15,M},
     8                 {3,0,5,M,M},
     9                 {M,M,0,6,9,15},
    10                 {M,4,M,0,9},
    11                 {M,M,M,3,0},
    12                 };
    13         int jLength=juzhen.length;
    14         int start = 0;
    15         int shortPath[] = new int[jLength];
    16         int visited[]=new int[jLength];
    17         int a=M;
    18         int k=0;
    19         for(int i=0;i<jLength;i++){        //这个for循环是为了将0到某个值都赋给最短路径,以为了之后的更改
    20             shortPath[i]=juzhen[start][i];
    21         }
    22         visited[start] = 1;
    23         for(int p=0;p<jLength;p++){
    24             a=M;
    25             for(int i=0;i<jLength;i++){        //找出0到其余点最短的那个
    26                 if(visited[i]!=1&&a>shortPath[i]){
    27                     a=shortPath[i];
    28                     k=i;
    29                 }
    30             };
    31             visited[k]=1;
    32             for(int i=0;i<jLength;i++){        //确定0到另一个最短点之后,找其他最短点,如果比0到此点小,替换之
    33                 if(visited[i]!=1&&shortPath[k]+juzhen[k][i]<shortPath[i]){
    34                     shortPath[i]=shortPath[k]+juzhen[k][i];
    35                 }
    36             }
    37         }
    38         for(int p=0;p<jLength;p++){
    39             System.out.println("0到"+p+"的距离为"+shortPath[p]);
    40         }
    41     }
    42 }

    三、0到(1,2,3,4,5)最短为5(第一步)

      0,5到(1,2,3,4)距离(051和01比,短的放在这),先和第一步的比较取短的,然后组内比较,取最短的,假设得3(第二步)

      0,5,3到(124)距离。。。。。重复第二步

  • 相关阅读:
    在移动端实现常按事件
    HBuilder的一些常用快捷键
    如何在vue里面调用高德地图
    js中获取当前时间
    vux使用方法
    模糊搜索的用法
    Vue-随笔小记
    常用到的一些事件
    java对接东华医疗数据库
    tomcat设置jdk路径
  • 原文地址:https://www.cnblogs.com/a1a1-3/p/7658355.html
Copyright © 2011-2022 走看看