在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 當然也參考了很多人的既有成果,希望和對仿生演算法 遺傳,蟻群,模擬退火等 感興趣的同行一道探索該領域。二 給大家推...