次短路小結

2021-09-02 15:18:52 字數 1190 閱讀 8804

次短路有兩種計算方法。

對於一條端點為u、v的邊,點v的次短路,要麼是點u的次短路加邊權,要麼是點u的最短路加邊權。

設兩個陣列,dist1儲存最短路,dist2儲存次短路,則存在下面的等式:

d is

t2[v

]=mi

ndist2[u]+w \\ dist1[u]+w&& \\ \end \right.

dist2[

v]=m

in}if

(dist2[v]

>dist2[u]

+w)}

if(dist2[v]

>dist[u]

+w && dist[u]

+w>dist[v])}

}}}對於無向圖,先從1跑一遍最短路,儲存在dist1,再從n跑一遍最短路,儲存在dist2,對於每一條邊,計算dist1[u]+dist2[v]+w,從裡面找出次短路。

等式如下:

a ns

=min⁡(

ans,

dist

1[u]

+dis

t2[v

]+w)

滿足:(dist1[u]+dist2[v]+w)>dist1[n]

ans=\min(ans,dist1[u]+dist2[v]+w) \text

ans=

min(an

s,di

st1[

u]+d

ist2

[v]+

w)滿足:(dist1[u]+dist2[v]+w)>dist1[n]

圖的儲存

//建圖

typedef pair<

int,

int> p;

vectorg[n]

;for

(int i=

1,x,y,z;i<=m;i++

)

跑完最短路後,求次短路。

//dist1和dist2分別是起點為1和n的最短路徑

int ans=

0x3fffffff

;for

(int i=

1;i<=n;i++

)for

(int j=

0;j.size()

;j++

)

最短路小結

通過對最短路的學習,我已經部分掌握了3大演算法及其變形,會用一些知識去解決問題,但學無止境,仍有許多知識我知之甚少,我希望通過我的努力會變得越來越強。floyd經典演算法適合多源最短路,由於複雜度較高,適合資料較小的題目,但也有些題目可由floyd的變形去做。dijkstra演算法為單源最短路,主要...

最短路問題 小結

分類 小結 2014 06 06 14 57 93人閱讀收藏 舉報最短路徑問題是圖論研究中的乙個經典演算法問題,旨在尋找圖 由結點和路徑組成的 中兩結點之間的最短路徑。演算法具體的形式包括 確定起點的最短路徑問題 即已知起始結點,求最短路徑的問題。確定終點的最短路徑問題 與確定起點的問題相反,該問題...

最短路演算法小結

dijkstra演算法 適用於 無負權邊,無環 視所求得 最短 定義而論 的圖的單源最短路問題 也就是考慮乙個點 常用 dist i 陣列儲存源點 到 i 點的距離,應用貪心的思想,每次 從 未選 點集中 選出距離已選點集最近 最優 的乙個點,然後將此點加入已選點集,嘗試通過此點 更新 源點 到未選...