迪傑斯特拉演算法詳解

2021-07-23 09:28:55 字數 2059 閱讀 3980

1、迪傑斯特拉演算法介紹

迪傑斯特拉演算法是典型最短路徑演算法,用於計算圖或網中某個特定頂點到其他所有頂點的最短路徑。主要特點是以起始點為中心向外,層層擴充套件,直到擴充套件覆蓋所有頂點。

2、迪傑斯特拉演算法思想

設g=(v,e)為乙個帶全有向圖,把圖中頂點集合v分成兩組。第一組為已求出最短路徑的頂點集合(用s表示,初始時s中只有乙個源點,以後每求得一條最短路徑 , 就將所到達最短路徑的頂點加入到集合s中,直到全部頂點都加入到s中)。第二組為其餘未確定最短路徑的頂點集合(用u表示,u=v-s,u中的頂點不斷的加入到s中,直到u為空,s=v)。在u加入s的過程中,始終保持源點到s中各頂點的最短路徑長度小於或等於源點到u中任意頂點的最短路徑長度。

3、迪傑斯特拉演算法執行步驟

設 n 為圖 g=(v,e) 中的頂點數,dist[n] 存放從源點到每個終點當前最短路徑的長度,path[n] 存放相應路徑,s 為已求得最短路徑的終點的集合,u為v-s,初始為不含有源點的所有頂點。

(1)初始化已求的最短路徑的集合s為只含有元素源點a,s={a}。

(2)從u中選取乙個距離源點v最小的頂點k,把k,加入s中(該選定的距離就是v到k的最短路徑長度)。

(3)以k為新考慮的中間點,修改u中各頂點的距離;若從源點v到頂點u(u u)的距離(經過頂點k)比原來距離(不經過頂點k)短,則修改頂點u的距離值,修改後的距離值為頂點k的距離加上頂點k到u邊上的權。

(4)重複步驟(2)和(3)直到所有頂點都包含在s中。

4、迪傑斯特拉演算法舉例說明

(1)有向圖如下,以a為源點,求源點a到其他各頂點的最短路徑。

(2)演算法詳細步驟如下表:

步驟s集合中

u集合中

初始化選入a,此時s=

此時最短路徑有a->a=0

以a為中間點,從a開始找

u=a->b=1

a->c=2

a->e=15

a->其他u中頂點為無窮

1從u=中發現路徑a->b=1最短

選入b,s=

此時最短路徑有a->a=0,a->b=1

以b為中間點,從a->b=1這條最短路徑開始找

u=(a->b->d=7)《初始的無窮

改寫a->b->d=無窮為當前的a->b->d=7

a-> b->其他u中頂點為無窮

2從u=中發現路徑a->c=2最短

選入c,s=

此時最短路徑有

a->a=0,a->b=1,a->c=2

以b為中間點,從a->c=2這條最短路徑開始找

u=(a->c->d=5)《已有的7

改寫為a->c->d=5

3從u=中發現路徑a->c->d=5最短

選入d,s=

此時最短路徑有

a->a=0,a->b=1,a->c=2,a->c->d=5

以d為中間點,從a->c->d=5這條最短路徑開始找

u=(a->c->d->e=9)《步驟1中的15

改寫為a->c->d->e=9

(a->c->d->f=6)《初始的無窮

改寫為a->c->d->f=6

4從u=中發現路徑a->c->d->f=6最短

選入f,s=

此時最短路徑有

a->a=0,a->b=1,a->c=2,a->c->d=5

a->c->d->f=6

以f為中間點,從a->c->d->f=6這條最短路徑開始找

u=(a->c->d->f->e=7)《步驟3中改寫成的9

改寫為a->c->d->f->e=7

5從u=中發現路徑a->c->d->f->e=7最短

選入f,s=

此時最短路徑有

a->a=0,a->b=1,a->c=2,a->c->d=5

a->c->d->f=6,a->c->d->f->e=7

u集合已空,查詢完畢。

例如,對下圖中的有向圖,應用dijkstra演算法計算從源頂點1到其它頂點間最短路徑的過程列在下表中。

dijkstra演算法的迭代過程:

迪傑斯特拉演算法詳解

迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個結點到其他結點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。看乙個應用場景和問題 戰爭時期,勝利鄉有7個村莊 a,b,c,d,e,f,g 現在有六個郵差,從g點出發,需要分別把...

迪傑斯特拉演算法

if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...

迪傑斯特拉演算法

dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...