Dijkstra演算法(C語言)

2022-07-07 23:42:28 字數 1773 閱讀 3832

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.演算法**實現:

const

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]}}

}

4.演算法例項

先給出乙個無向圖

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