A*搜尋演算法

A * 搜索算法 （ A * search algorithm ） 是一種在圖形平面上 ， 有多個節點的路徑 ， 求出最低通過成本的演算法 。 常用於遊戲中的NPC的移動計算 ， 或網絡遊戲的BOT的移動計算上 。 該算法綜合了和Dijkstra算法的優點 ： 在進行啓發式搜索提高算法效率的同時 ， 可以保證找到一條最優路徑 （ 需要評估函數滿足單調性 ） 。 在此算法中 ， 如果以表示從起點到任意頂點的實際距離 ， 表示任意頂點到目標頂點的估算距離 （ 根據所採用的評估函數的不同而變化 ） ， 那麼A * 算法的估算函數爲 ： 這個公式遵循以下特性 ： 如果爲0 ， 即只計算任意頂點到目標的評估函數 ， 而不計算起點到頂點的距離 ， 則算法轉化爲使用貪心策略的 ， 速度最快 ， 但可能得不出最優解 ； 如果不大於頂點到目標頂點的實際距離 ， 則一定可以求出最優解 ， 而且越小 ， 需要計算的節點越多 ， 算法效率越低 ， 常見的評估函數有 — — 歐幾里得距離 、 曼哈頓距離 、 切比雪夫距離 ； 如果爲0 ， 即只需求出起點到任意頂點的最短路徑 ， 而不計算任何評估函數 ， 則轉化爲最短路問題問題 ， 即Dijkstra算法 ， 此時需要計算最多的頂點 ；