通過地傑斯特拉來求最短路徑

2021-07-29 17:20:54 字數 1212 閱讀 4249

/*

按路徑長度遞增次序產生演算法:

把頂點集合v分成兩組:

(1)s:已求出的頂點的集合(初始時只含有源點v0)

(2)v-s=t:尚未確定的頂點集合

將t中頂點按遞增的次序加入到s中,保證:

(1)從源點v0到s中其他各頂點的長度都不大於從v0到t中任何頂點的最短路徑長度

(2)每個頂點對應乙個距離值

s中頂點:從v0到此頂點的長度

t中頂點:從v0到此頂點的只包括s中頂點作中間頂點的最短路徑長度

依據:可以證明v0到t中頂點vk的,或是從v0到vk的直接路徑的權值;或是從v0經s中頂點到vk的路徑權值之和

(反證法可證)

求最短路徑步驟

演算法步驟如下:

g=1. 初始時令 s=,t=v-s=,t中頂點對應的距離值

若存在,d(v0,vi)為弧上的權值

若不存在,d(v0,vi)為∞

2. 從t中選取乙個與s中頂點有關聯邊且權值最小的頂點w,加入到s中

3. 對其餘t中頂點的距離值進行修改:若加進w作中間頂點,從v0到vi的距離值縮短,則修改此距離值

重複上述步驟2、3,直到s中包含所有頂點,即w=vi為止

*/#include

#include

#include

using

namespace

std;

const

int maxn = 107;

int dis[maxn][maxn];

const

int inf = 0x3f3f3f3f;

bool book[maxn];

int d[maxn];//表示目前探索出的最短邊

int main()

else

//inf不能太大,因為太大了做了乙個加法會溢位成負數}}

while (1)

//演算法思想:先找距離開始點最近的點,將於這個點相連的點到起始點的距離進行更新。

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

book[1] = 1;

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

}cout

<< d[n] << endl;

}return

0;}

這題雖然很水,但也是幫我複習了一下dij演算法

還剩997道,加油!!!

迪傑斯特拉演算法求最短路徑

include define infinity 10000 define true 1 define false 0 define vertex num 6 typedef struct graph graph void shortestpath graph g,int v0,int p verte...

迪傑斯特拉最短路徑

問題描述 在帶權有向圖g中,給定乙個源點v,求從v到g中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的次序產生最短路徑的演算法。在本題中,讀入乙個有向圖的帶權鄰接矩陣 即陣列表示 建立有向圖並按照以上描...

js迪傑斯特拉演算法求最短路徑

名詞解釋和下圖參考 double arr new double allvertices.count allvertices.count 矩陣 allvertices所有三維座標點的集合 lines 所有兩點的連線 dijkstra演算法 param sourcev 源點的索引,從0開始 param ...