最短路徑之Dijkstra演算法 簡單易懂

2021-10-06 11:43:27 字數 870 閱讀 7559

最短路徑:任意a點到b點所經歷的最短距離。

主要演算法有:

dijkstra演算法(迪傑斯特拉演算法),floyd演算法(弗洛伊德演算法),a*演算法等。

今天開始逐步介紹下他們的演算法思想核心:

dijkstra演算法(迪傑斯特拉演算法)

這個演算法的思想我覺得和prim演算法相似,但是prim演算法是求最小生成樹,求的乙個圖中連線所有點的最小權值,但是dijkstra演算法是求的圖中任意兩點的最短路徑,所以二者在儲存最小權值資料的方式不同,prim主要獲取的是鄰接點的最小權值(兩點必須是相鄰的),dijkstra獲取的是點到點的最小權值(兩個點可以不相鄰,可以通過別的節點相連線,但是目的是點到點的最小權值),這樣一想,是不是簡單多了。

找出第乙個最短距離的點:

繼續找下乙個最短距離的點:

就按照這種思想一直尋找下去,我們就會獲得乙個最短的權值陣列,和乙個前驅陣列,通過前驅陣列我們就知道了最短路徑的路徑軌跡,通過最短權值陣列,我們就知道了最短路徑。

迪傑斯特拉演算法的時間複雜度是o(n^3)。

最短路徑 之Dijkstra演算法

dijkstra演算法dijkstra 鄰接矩陣 int n,e maxv maxv int dis maxv pre maxv pre用來標註當前結點的前乙個結點 bool vis maxv void dijkstra int s if u 1 return visit u true for in...

最短路徑 之Dijkstra演算法

dijkstra演算法 dijkstra 鄰接矩陣 int n,e maxv maxv int dis maxv pre maxv pre用來標註當前結點的前乙個結點 bool vis maxv void dijkstra int s if u 1 return visit u true for i...

最短路徑之Dijkstra演算法

using system namespace dijkstra演算法 路徑圖 static int places int math.sqrt map.length 獲取地點數 static int shortest new int places 存放從start到其他節點的最短路徑 static b...