第三十八天 單源最短路徑2

2021-10-10 22:59:15 字數 726 閱讀 4836

我們來觀察一下單元最短路徑1的**:

我們發現,每一次我們都需要遍歷所有的邊,無論是否已經使用過,但其實,我們可以從上一次確定過的最短距離的點出發再去尋找,這樣可以繼續縮短查詢的時間。

好的,因此我們可以繼續簡化演算法,在求解最短路徑最常用的演算法就是:dijkstra演算法

這個演算法需要乙個標記陣列來表示點是否已經使用過,

int cost[maxn]

[maxn]

;int d[maxn]

;bool used[maxn]

;int v,e;

初始化:

void

initial()

實現:

//我們不知道需要進行幾次迴圈

while

(true)if

(v==-1

)break

;//所有使用過的點都已經找完了

used[v]

=true

;for

(int u =

0; u < v; u++

)}

這個演算法複雜度是o(v^2),如果使用鄰接表的儲存方式複雜度是o(e),因為每一條邊只需要訪問一次。但是每一次列舉頂點的時候, 需要列舉所有的頂點來查詢下乙個頂點,複雜度依然是o(v^2)

單源最短路徑

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 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...

單源最短路徑

單源最短路徑問題,即在圖中求出給定頂點到其他任一頂點的最短路徑。1.最短路徑的最優子結構性質 該性質描述為 如果p i,j 是從頂點i到j的最短路徑,k和s是這條路徑上的乙個中間頂點,那麼p k,s 必定是從k到s的最短路徑。證明 假設p i,j 是從頂點i到j的最短路徑,則有p i,j p i,k...