• 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)距离。。。。。重复第二步

  • 相关阅读:
    android 之短信发送
    android 系统之ContentProvider
    android 开发电话拔号
    android 开发笔记
    android 常用权限备份
    在IE中使用Firebug
    常用的公式语言
    ASP.NET程序访问MS SQL的方法
    [News]将有新的代码生成工具集成在designer 8.5.1中
    JS对Lotus域的操作
  • 原文地址:https://www.cnblogs.com/a1a1-3/p/7658355.html
Copyright © 2020-2023  润新知