單源最短路徑 Dijkstra演算法

2021-07-10 12:27:26 字數 693 閱讀 7027

演算法思想:

設定頂點集合s並不斷做貪心選擇來擴充這個集合,乙個頂點屬於s當且僅當從源到該頂點的最短路徑長度已知。初始時,s中只含有源,設u是圖的某乙個頂點,把源到u且中間只經過s中頂點的路稱為從源到u的特殊路徑,並且用dist記錄當前每個頂點所對應的最短特殊路徑長度。演算法每次從v-s中取出具有最短特殊路徑長度的頂點u,將u新增到s中,同時對陣列dist進行修改,一旦s中包含所有v的頂點,dist就記錄了從源到其他所有頂點的最短路徑長度。

但是演算法求解的圖不能有負權邊。

#includeusing namespace std;

int main()

} //輸入

for(i=1;i<=m;i++)

//初始化dis陣列,由於此次計算1號頂點到各個的頂點的最短距離,故是e[1][i],book[1]=1

for(i=1;i<=n;i++)

dis[i]=e[1][i];

//book陣列初始化

for(i=1;i<=n;i++)

book[i]=0;

book[1]=1;

//dijkstra演算法核心

for(i=1;i<=n;i++)}}

//輸出最終結果

for(i=1;i<=n;i++)

return 0;           

}

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra單源最短路徑

dijkstra單源最短路徑 給定乙個帶權有向圖g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。下面給出兩個計算單源最短路徑的模板。dijkstra 簡...