最短路徑 迪傑斯特拉 Dijkstra 演算法

2022-04-05 04:19:42 字數 942 閱讀 4057

dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。

最短路徑?其實就是字面意思,乙個帶邊值的圖中從某乙個頂點到另外乙個頂點的最短路徑。

官方定義:對於內網圖而言,最短路徑是指兩頂點之間經過的邊上權值之和最小的路徑。

並且我們稱路徑上的第乙個頂點為源點,最後乙個頂點為終點。

由於非內網圖沒有邊上的權值,所謂的最短路徑其實是指兩頂點之間經過的邊數最少的路徑。

它的主要特點是以起始點為中心向外層層擴充套件(廣度優先搜尋思想),直到擴充套件到終點為止。

迪傑斯特拉演算法時間複雜度為 0(n^2);

演算法在實現步驟上類似與 普利姆演算法  從最原始頂點開始 一步一步求到所有頂點的最小距離;

但是如果我們要尋找另外乙個點到所有點的距離最小值 就要重新執行一遍這個演算法

#define maxv 9 //最大頂點數  

#define min 65535;

void djstl(mgraph g, int pos) //pos 這點到其餘個點距離最小值

他表示v0 這個點到各個頂點的最短路徑數。比如v0->v8 = 16 v0->v7=12;

patharc   

patharc[8]=7 表示v0->v8 終點v8的前驅頂點是v7 

patharc[7]=6 表示v7前驅頂點是v6

patharc[6]=3 表示v6前驅頂點是v3

patharc[3]=4 表示v3前驅頂點是v4

patharc[4]=2 表示v4前驅頂點是v2

patharc[2]=1 表示v2前驅頂點是v1

patharc[1]=0 表示v1前驅頂點是v0

最短路徑為v0->v1->v2->v4->v3->v6->v7->v8

迪傑斯特拉最短路徑

問題描述 在帶權有向圖g中,給定乙個源點v,求從v到g中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的次序產生最短路徑的演算法。在本題中,讀入乙個有向圖的帶權鄰接矩陣 即陣列表示 建立有向圖並按照以上描...

最短路 (迪傑斯特拉)

a 最短路 crawling in process.crawling failed time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status practice hdu 2544 description 在...

最短路徑 迪傑斯特拉演算法

例如,要求下圖v0到v8的最短路徑 所以我們可以找到這樣的一條最短路徑 下面是他的鄰接矩陣 偽 如下 define maxvex 9 define infinity 65535 typedef int patharc maxvex 用於儲存最短路徑下標的陣列 typedef int shortpat...