1. 程式人生 > 其它 >2022.3.30學習日記

2022.3.30學習日記

迪傑斯特拉演算法:

 連線圖是二維鄰接矩陣

通過Dijkstra計算圖G中的最短路徑時,需要指定起點vs(即從頂點vs開始計算)。
此外,引進兩個集合S和U。S的作用是記錄已求出最短路徑的頂點,而U則是記錄還未求出最短路徑的頂點(以及該頂點到起點vs的距離)。
初始時,S中只有起點vs;U中是除vs之外的頂點,並且U中頂點的路徑是"起點vs到該頂點的路徑"。然後,從U中找出路徑最短的頂點,並將其加入到S中;接著,更新U中的頂點和頂點對應的路徑。 然後,再從U中找出路徑最短的頂點,並將其加入到S中;接著,更新U中的頂點和頂點對應的路徑。 … 重複該操作,直到遍歷完所有頂點。


 思路整理:

將地圖整理成二維連線矩陣的形式,但把每個站點都當成一個矩陣行列,資料的大小十分龐大,這不是我一個人能應付過來的

所以我將圖例簡化——我發現圖有很多個交叉點,交叉點的出現,導致如果路線出現變更,需要從交叉點換車,並且換乘的次數不固定,要想取得最快的路線,有兩種情況:需要換乘和不需要換乘

不需要換乘很簡單,從出發點遍歷路線站表就可以獲得路線

需要換乘的情況就相對複雜了,不僅需要從出發線離開,還需要找到終點站在哪條線中

我將圖中交叉點留下,省略其他點,將交叉點之間的站間數作為權值,構造一個簡單的無向圖。出發點(或終點)如果是交叉點就直接借用交叉圖來計算和記錄;如果出發點(或終點)不在交叉點就將其向兩頭延申到交叉點再進行以上計算和記錄。

思路清晰,開始構建