1. 程式人生 > 其它 >迪傑斯特拉演算法(步步貪心)

迪傑斯特拉演算法(步步貪心)

迪傑斯特拉演算法

1.迪傑斯特拉演算法是求原點到各個點的最短距離,用的是步步貪心的方法所以不能解決帶負權圖,這個到後邊說

2.迪傑斯特拉演算法的實現

要用到的陣列 :
(1)graph[ ] [ ]用來存圖

(2)flag[ ]用來記錄此點是否已經被加入

(3)path[ i ]用來表示從原點到達 i 節點的前驅,輸出時直到找到前驅為原點即可,用來存路徑。具體參見弗洛伊德演算法中的路徑

(4)dist[ ]記錄原點到各個點的即時最短路徑

3.程式碼的實現

(1)初始化各個陣列

graph[][] //輸入自行建圖
flag[] = 0//開始時全部的點都沒用到
path[ ] = sor  //開始時前一個點是原點
for() dist[i] = graph[sor][i]//初始化dist[ ] flag[sor] = true//原點不用往裡加 dist[sor] = 0//到自己不用算

(2)依次貪心加入點並做標記,直到全部加入

for(int i = 1; i < v; i++)
     {
         int minx = 9999999;//設定一個無限大的量相對於graph
            int k = 0;//記錄要加入的點
         for(int j = 0; j < v; j++)
         {
             if(dist[j] < minx&&!flag[j])
             {
                 k 
= j; minx = dist[j]; } } flag[k] = true;//使用過的點做標記 for(int j = 0; j < v; j++) { if(dist[j] > minx + graph[k][j]) { dist[j] = minx + graph[k][j]; path[ j ] = k; } } }

(3)

輸出dist 和 path即可