單源最短路徑 Dijkstra演算法

2021-10-08 16:14:01 字數 1012 閱讀 1085

#include

#include

typedef

int vertextype;

//頂點型別

typedef

int edgetype;

#define maxvex 100

//最大頂點數

#define maxedge 200

//最大邊數

#define infinity 65535

//代表無窮大,兩個頂點之間不可達

int visited[maxvex]

;//訪問標誌的陣列

typedef

struct

mgraph;

void

createmgraph

(mgraph * g)

}void

dijkstra

(mgraph g,

int v0)

d[v0]=0

;//v0->v0的路徑為0

final[v0]=0

;//v0到v0不需要求路徑

for(v=

1;vfinal[k]=1

;//將目前找到的最近的頂點置為1

for(w=

0;w)//如果經過v頂點的路徑比現在這條路徑的長度更短的話}}

for(v=

0;vintmain()

/*0 1 1

0 2 5

1 2 3

1 3 7

1 4 5

2 4 1

2 5 7

3 4 2

3 6 3

4 6 6

4 7 9

4 5 3

5 7 5

6 7 2

6 8 7

7 8 4

時間複雜度o(n^2)

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