給定帶權有向圖g =(v,e),其中每條邊的權是非負實數。另外,還給定v中的乙個頂點,稱為源。現在要計算從源到所有其它各頂點的最短路長度。這裡路的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。
1、演算法基本思想
dijkstra演算法是解單源最短路徑問題的貪心演算法。
其基本思想是,設定頂點集合s並不斷地作貪心選擇來擴充這個集合。乙個頂點屬於集合s當且僅當從源到該頂點的最短路徑長度已知。
初始時,s中僅含有源。設u是g的某乙個頂點,把從源到u且中間只經過s中頂點的路稱為從源到u的特殊路徑,並用陣列dist記錄當前每個頂點所對應的最短特殊路徑長度。dijkstra演算法每次從v-s中取出具有最短特殊路長度的頂點u,將u新增到s中,同時對陣列dist作必要的修改。一旦s包含了所有v中頂點,dist就記錄了從源到所有其它頂點之間的最短路徑長度
例如,對右圖中的有向圖,應用dijkstra演算法計算從源頂點1到其它頂點間最短路徑的過程列在下頁的表中。
dijkstra演算法的迭代過程:迭代s
udist[2]
dist[3]
dist[4]
dist[5]
初始maxint
單源最短路徑 貪心演算法
乙個點 源點 到其餘各個頂點的最短路徑。也叫做 單源最短路徑 dijkstra。dijkstra的主要思想 每次找到離源點最近的乙個頂點,然後以該頂點為中心進行擴充套件,最終得到源點到其餘所有點的最短路徑 用flag標示該點是否在離源點最近的集合中 演算法步驟 1.初始時,s只包含源點,即p v的距...
單源最短路徑
include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...
單源最短路徑
最優子結構 最短路徑的子路徑也是最短路徑,動態規劃和貪心演算法的乙個重要指標。環路 一條最短路徑不可能包含環路 1 環路權重為負,如果有一條環路權重為負,則不存在最短路徑 2 環路權重為零,如果包含該環路,則將該環路去掉即可 3 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...