Dilkstra最短路径算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)距离。。。。。重复第二步

以上是关于Dilkstra最短路径算法的主要内容,如果未能解决你的问题,请参考以下文章

最短路径 深入浅出Dijkstra算法(一)

最短路径

(王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想代码演示答题规范)

最短路径算法(Dijkstra)

最短路径 - Dijkstra算法

最短路径算法