A 演算法解決最短路徑問題

2021-08-17 03:59:45 字數 869 閱讀 1172

常規的尋找最短路徑的演算法有bfs\迪傑斯特拉演算法;

但是搜尋範圍過大,比較費時;

也可以用最短的貪心演算法來計算,但是在兩點之間有障礙物的情況下,貪心求得的路徑並不是最短路徑(會走到障礙物再被彈回)。

所有我們 通過把貪心+ bfs =a*結合進行求最短路。

我們需要兩個陣列 open 表示需要被檢驗的點

close 表示已經被檢驗的點

當前判斷的點記為 current

對每個點都有乙個 parent 用來記錄其上個點,即父親點(用來回溯路徑)

對每乙個點計算,需要:

h_cost=從該點到終點的花費(貪心思想)

g_cose=從起始點到該點的花費(最短路徑bfs)

f_cost=h_cost+g_cost 該路徑的總花費

0、把起始點放入open

part 1 尋找當前判斷點

1、 從open中找出最小的f_cost的點移出,標記為current,把current 加入close 。

2、 如果current 是終點 return

part 2 對每個周圍點進行 更新

1、 如果周圍點是 障礙點或在close中,跳過該點到下一點

2、 計算周圍點

3、 如果計算後的f_cost比計算前小 或 周圍點不在 open中

更新周圍點f_cost值、更新parent 值為當前點current

把周圍點加入open(如果它此時不在open中)

Floyd演算法解決最短路徑問題

本文給出了用floyd演算法來求最短路徑問題的程式。輸入如下所示 1 測試用例個數 10 本測試用例的點數 1 2 4 第乙個點和第二個點之間的距離是4.1 3 8 2 3 3 2 4 4 2 5 6 3 4 2 3 5 2 4 5 4 4 6 9 5 6 4 如下 include define m...

最短路徑問題演算法

dijksatr演算法是典型最短路演算法,用於計算乙個節點到其他所有節點的最短路徑,主要特點是以起始點為中心向外層層擴充套件,直到拓展到終點為止。設g v,e 是乙個帶權有向圖,把圖中頂點集合v分成兩組,第一組為已求出最短路徑的頂點集合 用s表示,初始時s中只有乙個源點,以後每求得一條最短路徑 就將...

最短路徑演算法 最短路

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