Dilkstra最短路徑演算法

來源:互聯網
上載者:User

標籤:length   static   color   ++   site   另一個   最短路徑   code   stat   

迪傑斯特拉演算法(有向圖)

一、演算法的大概流程:

  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最短路徑演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.