最短路徑演算法(Dijkstra)學習筆記

2022-08-03 20:12:17 字數 1578 閱讀 3824

#include#include

using

namespace

std;

#define vex 5//

定義結點的個數

#define maxpoint 100

double graph[maxpoint]=,,,

,}; //

鄰接矩陣

inti,j;

intmain()

,b[maxpoint];

int d[vex],p[vex];//

定義陣列d用來存放結點特殊距離,p陣列存放父親結點

//初始時,紅點集中僅有源結點0

r[0]=1

; b[

0]=0

;

for(int i=1; i)

b[i]=1;//

對陣列d、p進行初始化

for(i=0; i)

//輸出鄰接矩陣

for(i=0; i)

//輸出d、p表頭

cout<<"";

for(i=0; i)

cout

<<"d["

<"

] ";

cout

<<"";

for(i=0; i)

cout

<<"p["

<"

] ";

cout

每次從藍點集中取出具有最短特殊路長度的結點min

//輸出最短路徑

for(i=0; i)

cout

<"";

cout

<<"";

for(i=0; i)

cout

<"";

cout

<}

}

dijkstra

演算法ødijkstra演算法是解單源最短路徑問題的貪心演算法。

ø基本思想:設定頂點集合s並不斷地作貪心選擇來擴充這個集合。乙個頂點屬於集合s當且僅當從源到該頂點的最短路徑長度已知。

(1)初始時,s中僅含有源節點。

(2)設u是g的某乙個頂點,把從源到u且中間只經過s中頂點的路稱為從源到u的特殊路徑,用陣列d[i]記錄頂點i當前所對應的最短特殊路徑長度。

(3)dijkstra演算法每次從v-s中取出具有最短特殊路長度的頂點u,將u新增到s中,同時對陣列d作必要的修改。

(4)一旦s包含了所有v中頂點,dist就記錄了從源到所有其它頂點之間的最短路徑長度。

dijkstra演算法的

基本思想

ø設s為最短距離已確定的頂點集(紅點集)

øv-s是最短距離尚未確定的頂點集(藍點集)。

①初始化

最初只有源點s的最短距離是已知的(d(s)=0),故紅點集s= 。

②重複以下工作,按路徑長度遞增次序產生各頂點最短路徑

在當前藍點集中選擇乙個最短距離最小的藍點來擴充紅點集,以保證演算法按路徑長度遞增的次序產生各頂點的最短路徑。

當藍點集中僅剩下最短距離為∞的藍點,或者所有藍點已擴充到紅點集時,s到所有頂點的最短路徑就求出來了。

乙個例項

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...