dijkstra演算法
1.定義概覽
dijkstra(迪傑斯特拉
)演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。
dijkstra
演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。注意該演算法要求圖中不存在負權邊。
2.演算法描述
1)演算法思想:設
g=(v,e)
是乙個帶權有向圖,把圖中頂點集合
v分成兩組,第一組為已求出最短路徑的頂點集合(用s表示,初始時
s中只有乙個源點,以後每求得一條最短路徑
, 就將加入到集合
s中,直到全部頂點都加入到
s中,演算法就結束了),第二組為其餘未確定最短路徑的頂點集合(用u表示),按最短路徑長度的遞增次序依次把第二組的頂點加入
s中。在加入的過程中,
總保持從源點v到
s中各頂點的最短路徑長度不大於從源點v到
u中任何頂點的最短路徑長度
。此外,每個頂點對應乙個距離,s中的頂點的距離就是從
v到此頂點的最短路徑長度,
u中的頂點的距離,是從
v到此頂點只包括
s中的頂點為中間頂點的當前最短路徑長度。
2)演算法步驟:
a.初始時,s只包含源點
,即s=,v
的距離為0。
u包含除
v外的其他頂點,即
:u=,若v與
u中頂點
u有邊,則
正常有權值,若u不是
v的出邊鄰接點,則
權值為∞。
b.從u
中選取乙個距離
v最小的頂點k,把
k,加入
s中(該選定的距離就是v到
k的最短路徑長度)。
c.以k
為新考慮的中間點,修改
u中各頂點的距離;若從源點
v到頂點
u的距離(經過頂點
k)比原來距離(不經過頂點
k)短,則修改頂點
u的距離值,修改後的距離值的頂點
k的距離加上邊上的權。
d.重複步驟b和
c直到所有頂點都包含在s中。
3.演算法**實現:
const4.演算法例項int maxint = 32767
;const
int maxnum = 10
;int
dist[maxnum];
intprev[maxnum];
inta[maxunm][maxnum];
void dijkstra(int
v0) dist[v0] = 0
; s[v0] = true
;
for(int i=2; i<=n; i++)
s[u] = true
;
for(int j=1; j<=n; j++)
if((!s[j]) && a[u][j]}}
}
先給出乙個無向圖
用dijkstra演算法找出以
a為起點的單源最短路徑步驟如下
c語言Dijkstra演算法
include dijkstra演算法 解決最短路徑問題,從乙個初始點v0出發,設定lowcost陣列,記錄初始點到每乙個頂點的最短路徑,設定path陣列 記錄初始點到每個點最短路徑所經過的每乙個點,設定visit陣列,記錄已經選入lowcost陣列的點設定為 1 下次經過不再選中。思想 選擇初始點...
dijkstra演算法 C語言 鄰接表
用來求單源最短路徑 ss和u兩個陣列,ss存放已計算完的頂點,u存放未計算完的頂點 dis欄位標識到此點的距離 步驟1 初始化,第乙個點dis 0,後面的點dis 1000 2 迴圈n次,n為頂點數 2.1 從u中取出乙個dis最小的頂點,放入ss,從u中刪除這個頂點 2.2 設取出的頂點為v,遍歷...
Dijkstra演算法 c語言實現
dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...