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演算法是很有代表性的最短...