dijkstra算法原理_dijkstra算法演示_Dijkstra(迪杰斯特拉)算法分析與實現(xiàn)(C/C++)
本文關(guān)鍵詞:dijkstra算法,由筆耕文化傳播整理發(fā)布。
最短路徑算法—Dijkstra(迪杰斯特拉)算法分析與實現(xiàn)(C/C++)
接上一篇:最短路徑算法—Bellman-Ford(貝爾曼-福特)算法分析與實現(xiàn)(C/C++)
Dijkstra(迪杰斯特拉)算法是典型的最短路徑路由算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。dijkstra算法能得出最短路徑的最優(yōu)解,但由于它遍歷計算的節(jié)點很多,所以效率低。
dijkstra算法是很有代表性的最短路算法,在很多專業(yè)課程中都作為基本內(nèi)容有詳細的介紹,如數(shù)據(jù)結(jié)構(gòu),,圖論,運籌學等等。
其基本思想是,設(shè)置頂點集合S并不斷地作貪心選擇來擴充這個集合。一個頂點屬于集合S當且僅當從源到該頂點的最短路徑長度已知。
初始時,S中僅含有源。設(shè)u是G的某一個頂點,把從源到u且中間只經(jīng)過S中頂點的路稱為從源到u的特殊路徑,并用數(shù)組dist記錄當前每個頂點所對應(yīng)的最短特殊路徑長度。dijkstra算法每次從V-S中取出具有最短特殊路長度的頂點u,將u添加到S中,同時對數(shù)組dist作必要的修改。一旦S包含了所有V中頂點,dist就記錄了從源到所有其它頂點之間的最短路徑長度。
例如,對下圖中的有向圖,應(yīng)用dijkstra算法計算從源頂點1到其它頂點間最短路徑的過程列在下表中。
dijkstra算法的迭代過程:
主題好好理解上圖!
以下是具體的實現(xiàn)(C/C++):
輸入數(shù)據(jù):
5
7
1 2 10
1 4 30
1 5 100
2 3 50
3 5 10
4 3 20
4 5 60
輸出數(shù)據(jù):
999999 10 999999 30 100
10 999999 50 999999 999999
999999 50 999999 20 10
30 999999 20 999999 60
100 999999 10 60 999999
源點到最后一個頂點的最短路徑長度: 60
源點到最后一個頂點的路徑為: 1 -> 4 -> 3 -> 5
最后給出兩道題目練手,都是直接套用模版就OK的:
1.HDOJ 1874 暢通工程續(xù)
?p=1894
2.HDOJ 2544 最短路
?p=1892
posted on
本文關(guān)鍵詞:dijkstra算法,由筆耕文化傳播整理發(fā)布。
本文編號:68702
本文鏈接:http://sikaile.net/wenshubaike/shangbiaozhuanli/68702.html