最短路徑 Dijkstra演算法

2021-06-20 23:58:07 字數 1718 閱讀 9986

最短路徑--dijkstra演算法

dijkstra演算法

:原理就是:以某乙個節點為源點,向到其他節點進行遍歷,尋找源點到各節點的最短路徑,

它需要對所有節點進行遍歷,所有當節點較多時,效率比較低。

迪科斯徹演算法使用了

廣度優先搜尋

解決非負權有向圖的單源

最短路徑問題

,演算法最終得到乙個

最短路徑樹。

樣例程式中是以v0

為源點的

迴圈次數

mindist[0]

mindist[1]

mindist[2]

mindist[3]

mindist[4]初始0

0010max

30100

10,110

1060

30100

20,1,330

1050

3090

30,1,3,220

1050

3060

40,1,3,2,440

1050

3060

列印次序:

0, 10, 50, 30, 60

第一次迴圈:v0-v1為10,然後對比 v0-v2 和 v0-v1-v2最小離是多少;v0-v2為最大值maxint,v0-v1-v2的最小距離是10 + 50 = 60;  修復最小距離60。

第二次迴圈:找到最小值 30,然後對比 v0  直接到 【與v3有連線的各點vn(2,4)】的距離,和 v0-v4-vn的距離。修復v0到vn的最小距離

package graph.dijkstra;

/** * created by xu on 14-3-15.

*/class node

public class dijkstra

for (int i = 0; i < length; i++)

paths[i][j] = weight;}}

//初始化邊連線

paths[0][1] = 10;

paths[0][3] = 30;

paths[0][4] = 100;

paths[1][2] = 50;

paths[2][4] = 10;

paths[3][2] = 20;

paths[3][4] = 60;

}public void calc()

nodes[0].isvisit = true;

for (int x = 1; x < length; x++)

}/* 1、選出最小距離節點v後。再看源節點v0 到 與 v 有連線的節點vn 的距離 會不會 比 vo 直接 到vn 的距離小。

2、有就修正v0 到 vn 的距離。

*/if (minindex > -1) }}

}for (int i = 0; i < length; i++)

}public static void main(string args)

}

Dijkstra最短路徑演算法

基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...

Dijkstra最短路徑演算法

引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...

最短路徑 Dijkstra演算法

最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...