演算法 迪傑斯特拉演算法(dijkstra) 最短路徑

2022-07-25 04:33:08 字數 1543 閱讀 7912

迪傑斯特拉演算法(dijkstra)-最短路徑

簡介:

迪傑斯特拉演算法是由荷蘭計算機科學家狄克斯特拉

於1959 年提出的,因此又叫狄克斯特拉演算法

。是從乙個頂點到其餘各頂點的最短路徑

演算法,解決的是有向圖中最短路徑問題。迪傑斯特拉演算法主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。

演算法思想:

設g=(v,e)是乙個帶權有向圖,把圖中頂點集合v分成兩組,第一組為已求出最短路徑的頂點集合(用s表示,初始時s中只有乙個源點,以後每求得一條最短路徑 , 就將加入到集合s中,直到全部頂點都加入到s中,演算法結束),第二組為其餘未確定最短路徑的頂點集合(用u表示),按最短路徑長度的遞增次序依次把第二組的頂點加入s中。在加入的過程中,總保持從源點到s中各頂點的最短路徑長度不大於從源點到u中任何頂點的最短路徑長度。

演算法步驟:

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

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

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

2. 在(t)未確定的點中選取當前以得的最短路徑(與s中頂點有關聯邊且權值最小)

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

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

演算法例項:

**例項:

1 #include2 #include3

#define inf 1000000

4using

namespace

std;

5const

int maxn=1000;6

int dis[maxn],g[maxn][maxn],n;//

儲存最短距離,圖矩陣,頂點數

7bool v[maxn]; //

判斷頂點是否訪問 89

void

dijkstra()

1024 v[mark]=1;25

for(int j=1;j<=n;++j)//

更新最短路徑

26if(!v[j])

27 dis[j]=min(dis[j],dis[mark]+g[mark][j]);28}

29}30int

main()

3142

dijkstra();

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

4447

return0;

48 }

ps:無負邊

ps:部分資料**網上 

迪傑斯特拉演算法

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

迪傑斯特拉演算法

迪傑斯特拉演算法用來計算圖中某一點到其他點的最短距離,這個圖可以是加權,也可以是無權的,距離指的是從一點到其它點所經過的邊的權重和 假設現在有乙個加權無向圖,我們要求節點1到其他點的最短距離 初始化圖arr 用乙個鄰接矩陣來表示一張圖,矩陣元素 初始化一維向量d,這個向量儲存的是其他點的最短距離,初...