最短路徑演算法CH

2021-07-05 08:08:41 字數 585 閱讀 8666

ch的思路:

contraction hierarchies

預處理生成乙個多層的結構,每個點都處在單獨的一層。事先對點進行優先順序排序(怎麼排都行,但是排序的好壞直接影響到預處理的效率以及搜尋的效率。舉個例子,鄰接點個數)

點的優先順序(高低)是人為指定的,根據優先順序從低到高依次選點進行contraction.什麼是contraction呢,假設拿掉這個點,看看會不會影響圖中點對之間的shorstest path。因此只需要看看它鄰接的級別比它高的點的兩兩點對之間的shortest path是否經過這個點,如果經過的話,就在這個點對之間加上一條邊儲存它們的shortest path,這條邊叫做shortcut。為什麼只需要看級別比它高的點?這與ch在搜尋最短路徑時的演算法有關。ch採用雙向dijkstra,並且搜的時候只能從級別低的往級別高的搜,兩邊相碰之後,就儲存路徑。如果某個點a的兩個鄰接點b,c的級別都比a低,而且bc之間的最短路徑經過a的話,是不需要在bc之間加shorcut的,直接通過雙向dijkstra可以搜尋出來。

搜尋過程:

雙向dijkstra,從低往高搜。停止條件:兩邊的open佇列都為空了

搜完之後,需要將shortcut轉化成原始邊。 

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路徑演算法

floyd演算法 012345 001 54 1108 1 2 801 3 3 1035 45 302 5413520 floyd 演算法過程描述如下 首先 以邊集 初始化,得到所有的直接連通代價 依次考慮第 k個結點,對於 中的每乙個 i j 判斷是否滿足 s i j s i k s k j 如果...

最短路徑演算法

個人覺得下面 有代表性 最短路徑演算法原始碼 vb 本人載 開發gis,遊自編的最短路徑查詢程式,速度特快,3萬節點,35000條路全部遍歷,只需1秒。現將最短路徑的思路告訴大家,希望大家在優化,並用不同語言編制,我正在學delphi,準備用delphi做成庫,本例以由拓撲關係的arc info 檔...