Dijkstra 單源最短路徑

2021-06-10 00:42:31 字數 714 閱讀 2872

演算法思想:

輔助陣列dis[i] 表示當前源頂點到i的最短路徑。dis[i]在程式未結束前,類似於動態規劃,可更新以取得最小值

陣列path用來記錄路徑

首先初始化令dis[i]為edge[v0][i],v0為源頂點

,然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis[i]的值,依次迴圈n-1次,即可得打正解.

測試**:

#include

#include

#include

#define max 1000

#define m 100

#define n 100

using namespace std;

int edge[m][n];

void dijkstra(int *path,int *dis,int v0,int n);

void showpath(int *path,int v,int v0);

int main()

int path[n+1];

int  dis[n+1];

dijkstra(path,dis,1,n);

for(int q=2;q<=n;++q)}}

}void showpath(int *path,int v,int v0)

s.push(v);

while(!s.empty())

{cout<

Dijkstra 單源最短路徑

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

Dijkstra單源最短路徑

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

單源最短路徑(Dijkstra)

dijkstra演算法基於貪心思想,計算乙個節點到其他所有節點的最短路徑。該演算法要求圖中不存在負權邊。時間複雜度 o n 基本演算法 將圖中所有的頂點v分成兩個頂點集合va和vb。如果源點s到u的最短路徑已經確定,則點u屬於集合va,否則屬於集合vb。最開始的時候va只包含源點s,其餘的點屬於vb...