給定乙個帶權有向圖(或者無向圖)g與源點v,求從源點v到g中其他頂點的最短路徑,並限定各邊上的權值大於0。
圖g=(1)初始時令 s=,t=v-s=,t中頂點對應的距離值
若存在,dist(v0,vi)為弧上的權值
若不存在,dist(v0,vi)為∞
(2)從t中選取乙個與s中頂點有關聯邊且權值最小的頂點u,加入到s中 ;
(3)對其餘t中頂點的距離值進行修改,若加進作中間頂點,從v0到vi的距離值縮短,則修改此距離值
(4)重複上述步驟(2)、(3),直到s中包含所有頂點為止。
#include
using
namespace std;
//定義圖的頂點個數
const
int node =7;
//表示無窮大
const
int inf =
1000000000
;//輸出單元最短路徑
void
dispath
(int arr[node]
[node]
,int dist,
int path,
int s,
int v)
else
d++;//新增路徑上的起點
apath[d]
= v;
//先輸出起點
cout << apath[d]
;for
(j = d-
1; j >=
0; j--
) cout << endl;}}
}}void
dijkstra
(int arr[node]
[node]
,int v)
else
} s[v]=1
; path[v]=0
;for
(i=0
;i1;i++)}
//將找到的符合要求的頂點u加入s中
s[u]=1
;for
(j=0
;j}}
dispath
(arr,dist,path,s,v);}
intmain
(int argc,
char
*ar**)
,,,,
,,};
dijkstra
(arr,0)
;return0;
}
Dijkstra(迪傑斯特拉)演算法
迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。指定乙個節點,例如我們要計算 a 到其他節點的最短路徑 引入兩個集合 s u s集合包含已求出的最短路徑的點 以及相...
dijkstra迪傑斯特拉演算法
注意 1.標頭檔案climits的int max,加上2整數會溢位,每次相加前得判斷被加值是否為int max,int max 10為負數 2.得先初始化再對d s c s g,cost等賦值 fill d 0 d 0 max,int max fill g 0 0 g 0 0 max max,int...
迪傑斯特拉 Dijkstra 演算法
迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。通過dijkstra計算圖g中的最短路徑時,需要指定起點s 即從頂點s開始計算 dijkstra演算法算是貪心思想實...