迪傑斯特拉演算法(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 #include3ps:無負邊#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:部分資料**網上
迪傑斯特拉演算法
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,這個向量儲存的是其他點的最短距離,初...