給定帶權有向圖g=(v,e),其中每條邊的權是非負實數。給定v中的乙個頂點,稱為源。
現在要計算從源到所有其它各頂點的最短路長度,這裡路的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。
每條邊上標註有字母和數字,在字母旁邊的數字為路長。
演算法從優先佇列中取出具有最小當前路長的結點作為當前擴充套件結點,並依次檢查與當前擴充套件結點相鄰的所有頂點。
剪枝規則:
如果從當前擴充套件結點i到頂點j有邊可達,且從源出發,途經頂點i再到頂點j相應的路徑的長度小於當前最優路徑長度,則將該頂點作為活結點插入到活結點優先佇列中。
演算法從優先佇列中取出具有最小當前路長的結點作為當前擴充套件結點,並依次檢查與當前擴充套件結點相鄰的所有頂點。
如果從當前擴充套件結點i到頂點j有邊可達,且從源出發,途經頂點i再到頂點j相應的路徑的長度小於當前最優路徑長度,則將該頂點作為活結點插入到活結點優先佇列中。
#include
#include
#include
using
namespace std;
class
graphic
;class
pathnode
bool
operator
<
(pathnode b)
const};
graphic::
graphic
(int n,
int e)
for( i=
0;i;void graphic::
shortpath()
}}}void graphic::
display()
cout<
intmain()
單源最短路徑問題
如圖,求v0到其他頂點的最短路徑及其長度,廢話少說,用dijkstra演算法。我在 資料結構 c語言版 裡面的 的基礎上寫了乙個直接儲存路徑的版本。看 include includeusing namespace std define maxint 1000000 src 為源節點 g 有向圖的鄰接...
單源最短路徑問題
一 單源最短路徑問題 1 求下列多級圖的單源最短路徑,寫出求解過程。根據cost i min可知 cost為 1 2 3 4 5 6 7 8 9 10 d為 1 2 34 5 6 78 9 10 p為 1 2 3 4 5 6 7 8 9 10 計算過程如下 初始 cost 1.n 0 cost 9 ...
單源最短路徑問題
單源最短路徑問題是這樣乙個問題 在圖中給定乙個起點,求起點到其它頂點的最短距離。dijkstra演算法是用來解決邊權非負的情況的。它的基本思想是設乙個陣列d n 用來代表起點到其它頂點的最短距離。初始的時候d start 為0,其它的d i 設為無窮。然後從起點開始遍歷整個圖,若存在頂點u,使得d ...