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

  • 相关阅读:
    Win7+IIS伪静态 UrlRewriter配置
    让VS2010打包工具找回丢失的.net 2.0 .
    高效注册DLL控件 让你的IE浏览器复活
    查询及删除重复记录的方法
    .NET代码模板生成工具CodeSmith 5.0.1 专业版完美版下载
    如何使用CslaGen生成CSLA DAL层代码
    用C# + WebBrowser控件抓取AJAX页面的内容[转]
    了解IIS6应用程序池假死问题解决办法
    美化界面2
    C# WebBrowser高级应用
  • 原文地址:https://www.cnblogs.com/a1a1-3/p/7658355.html
Copyright © 2011-2022 走看看