A Star演算法的原理及應用

2021-04-14 23:02:00 字數 1926 閱讀 9626

在acm集訓時看到小超同學在寫乙個a-star的尋路演算法,於是心癢癢,自己也想寫乙個,只是一直沒有時間靜下來好好動動腦筋,近日終於趁週末的時間,把a-star實現了,可在地圖上尋找較短路徑,也可解任意迷宮。

在計算機中我們將地圖表現為單元格,分可走單元格和不可走單元格。

如果用窮搜找最短路徑當然是可以實現,但代價卻很大。

於是我們必須要讓計算機「有選擇地走」。

若以當前單元格為起點(稱為父單元格,它的周圍有八個方向),下一步走哪呢?

這時就得給下一步的單元格(稱為子單元格)進行「估價」。

「估價」可用估價函式來實現。

入門級的估價函式是這樣的:

終點到目前點的估計代價=終點至當前點的直線距離

於是下一步的代價可以這樣算

代價=起點到當前點的實際步數(通過乙個變數累加可以直接得到)+ 終點到目前點的估計代價

然後把估價後的單元格放入「待考察表」

從待考察表中取代價最小的單元格作為起點,對它周圍8個方向的單元格進行估價,然後把它放入「已考察表」。

enter the map's filename:

b.txt

rows=7

cols=13

. . . . . . . . . . . . .

. . . . . . x . . . . . .

. . . x x x x . . . . . .

. . . . . . x . . . . . .

. . . x x x x . . . . . .

. . . . . . x . . . . . .

. . . . . . . . . . . . .

set the start point ( x , y ):

5 3set the end point ( x , y ):

12 3

steps:

12,3

11,2

10,1

9,08,0

7,06,0

5,04,0

3,12,2

3,34,3

5,3rows=7

cols=13

. . . . * * * * * * . . .

. . . * . . x . . . * . .

. . * x x x x . . . . * .

. . . * * * x . . . . . *

. . . x x x x . . . . . .

. . . . . . x . . . . . .

. . . . . . . . . . . . .

*************************==

enter the map's filename:

a.txt

rows=7

cols=7

. . . . . . .

. x x x . . .

. . . x . x .

. . . x . x .

. . . . . x .

. . . . . x .

. . . . . x .

set the start point ( x , y ):

0 0set the end point ( x , y ):

6 6steps:

6,66,5

6,46,3

6,25,1

4,03,0

2,01,0

0,0rows=7

cols=7

* * * * * . .

. x x x . * .

. . . x . x *

. . . x . x *

. . . . . x *

. . . . . x *

. . . . . x *

基於c 的A star演算法

資料 一 基礎原理 1 從起點開始,向周圍八個方向擴充套件。測試新擴充套件的點的路徑代價,路徑代價由已走的路徑和距離終點的期望加和而成。這個路徑代價是選擇路徑的標準。2 有兩個表open close。close 生成並且考察過的點,存在兩種點。一種是當前選擇的路徑,是最終想要的結果。另一種是考察但沒...

RSA演算法原理及應用示例

rsa演算法是一種基於公鑰和私鑰的加密演算法,是由ronald rivest,adi shamir和len adleman三人在diffie helman指數金鑰交換演算法的 基礎上於1977年設計出來的,rivest設計的加密系統利用了數學領域的乙個事實,那就是雖然把兩個大素數相乘生成乙個合數是件...

蟻群演算法原理及應用

一 開學第五周,這幾天在學習蟻群演算法的原理和應用,以及編碼實現ant colony algorithm解決tsp問題。除錯成功後,我會把具體的 和說明文件上傳 coding by c 當然也參考了很多人的既有成果,希望和對仿生演算法 遺傳,蟻群,模擬退火等 感興趣的同行一道探索該領域。二 給大家推...