單源最短路徑

2022-09-17 12:51:11 字數 2727 閱讀 6672

本文章使用狄克斯特拉演算法,該演算法不可以應用於包含負權值的圖。具有負權值的圖可以套用貝爾曼-福特演算法或弗洛伊德演算法來處理

輸入:第一行輸入g的頂點數n。接下來n行按如下格式輸入各頂點u的鄰接表。

u k v1 c1 v2 c2 ... vk ck

g中的各頂點編號分別為0至n-1。u代表頂點的編號,k代表u的出度。vi(i = 1, 2, ... , k)代表與u相鄰頂點的編號,ci代表u到vi的有向邊的權值。

輸出:按順序輸出個頂點編號v及距離d[v],相鄰資料間用1個空格隔開。

1 #include2

using

namespace

std;34

static

const

int max = 100;5

static

const

int infty = (1

<<21);6

static

const

int white = 0;7

static

const

int gray = 1;//

代表預選

8static

const

int black = 2;//

代表入選 910

intn, m[max][max];

11//

狄克斯特拉

12void

dijkstra()

26 d[0] = 0

;27 color[0] =gray;

2829

while(1

) 37}38

//遍歷結束則退出迴圈

39if(u == -1) break

;40 color[u] =black;

4142

for(int v = 0; v < n; v++) 49}

50}51}

5253

for(int i = 0; i < n; i++) 56}

5758

intmain() 65}

6667

intk, c, u, v;

68for(int i = 0; i < n; i++) 74}

7576

dijkstra();

7778

return0;

79}

8081

/*82583

0 3 2 3 3 1 1 2

841 2 0 2 3 4

852 3 0 3 3 1 4 1

863 4 2 1 0 1 1 4 4 3

874 2 2 1 3 3

88*/

本文章使用狄克斯特拉演算法,該演算法不可以應用於包含負權值的圖。具有負權值的圖可以套用貝爾曼-福特演算法或弗洛伊德演算法來處理

輸入:第一行輸入g的頂點數n。接下來n行按如下格式輸入各頂點u的鄰接表。

u k v1 c1 v2 c2 ... vk ck

g中的各頂點編號分別為0至n-1。u代表頂點的編號,k代表u的出度。vi(i = 1, 2, ... , k)代表與u相鄰頂點的編號,ci代表u到vi的有向邊的權值。

輸出:按順序輸出個頂點編號v及距離d[v],相鄰資料間用1個空格隔開。

1 #include2

using

namespace

std;34

static

const

int max = 100;5

static

const

int infty = (1

<<21);6

static

const

int white = 0;7

static

const

int gray = 1;//

代表預選

8static

const

int black = 2;//

代表入選 910

intn, m[max][max];

11//

狄克斯特拉

12void

dijkstra()

26 d[0] = 0

;27 color[0] =gray;

2829

while(1

) 37}38

//遍歷結束則退出迴圈

39if(u == -1) break

;40 color[u] =black;

4142

for(int v = 0; v < n; v++) 49}

50}51}

5253

for(int i = 0; i < n; i++) 56}

5758

intmain() 65}

6667

intk, c, u, v;

68for(int i = 0; i < n; i++) 74}

7576

dijkstra();

7778

return0;

79}

8081

/*82583

0 3 2 3 3 1 1 2

841 2 0 2 3 4

852 3 0 3 3 1 4 1

863 4 2 1 0 1 1 4 4 3

874 2 2 1 3 3

88*/

單源最短路徑

include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...

單源最短路徑

最優子結構 最短路徑的子路徑也是最短路徑,動態規劃和貪心演算法的乙個重要指標。環路 一條最短路徑不可能包含環路 1 環路權重為負,如果有一條環路權重為負,則不存在最短路徑 2 環路權重為零,如果包含該環路,則將該環路去掉即可 3 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...

單源最短路徑

單源最短路徑問題,即在圖中求出給定頂點到其他任一頂點的最短路徑。1.最短路徑的最優子結構性質 該性質描述為 如果p i,j 是從頂點i到j的最短路徑,k和s是這條路徑上的乙個中間頂點,那麼p k,s 必定是從k到s的最短路徑。證明 假設p i,j 是從頂點i到j的最短路徑,則有p i,j p i,k...