歡迎使用我的 在線工具

          小D

          讀歷史、看小說、寫程序都是我所愛。技術(shù)不好,頭腦不靈光,靠的是興趣。
          隨筆 - 35, 文章 - 25, 評論 - 13, 引用 - 0

          導航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          公告


          常用鏈接

          留言簿(2)

          隨筆分類(34)

          隨筆檔案(35)

          文章分類(27)

          文章檔案(25)

          偶像啊

          技術(shù)網(wǎng)站

          搜索

          •  

          積分與排名

          • 積分 - 58964
          • 排名 - 885

          最新評論

          閱讀排行榜

          評論排行榜

          A star算法弱弱的小結(jié)

          搞了N個小時,終于杯具的把A*算法寫出來了,這里只能弱弱的小結(jié)一下:
          A*算法是一種啟發(fā)式算法:
          即每次迭代都進行啟發(fā)式思考,判斷F值:
          我們維護兩個表,我這只用簡單的數(shù)組實現(xiàn)。
          OPEN表和CLOSE表
          OPEN表存儲我們待搜索的節(jié)點
          CLOSE表存儲已經(jīng)搜索好的節(jié)點,這些節(jié)點都是每次啟發(fā)時F值最小的。
          A為其點
          B為終點

          F = H + G
          G = 從起點A,沿著產(chǎn)生的路徑,移動到網(wǎng)格上指定方格的移動耗費。G = 距離(A) * 偏移量
          H = 從網(wǎng)格上那個方格移動到終點B的預估移動耗費。這經(jīng)常被稱為啟發(fā)式的,
          ??? 可能會讓你有點迷惑。這樣叫的原因是因為它只是個猜測。
          ??? 我們沒辦法事先知道路徑的長度,因為路上可能存在各種障礙(墻,水,等等)。
          ??? 雖然本文只提供了一種計算H的方法,但是你可以在網(wǎng)上找到很多其他的方法。
          ??? H = (列距離(B) + 行距離(B)) * 偏移量
          我們選定上一次添加到CLOSE表的節(jié)點為當前節(jié)點。
          然后依次判斷當前節(jié)點的四個或八個方向的節(jié)點。如果這些節(jié)點是障礙,或者已經(jīng)在CLOSE表中,
          則不予考慮,否則將這些節(jié)點的父節(jié)點設為當前節(jié)點,這些節(jié)點如果也沒有在OPEN表中,
          則加入OPEN表,如果這些節(jié)點編號已經(jīng)出現(xiàn)在OPEN表中,則判斷他們的G值,G值小的留下,G值大的扔掉。
          如果G值也相同,保留后出現(xiàn)的。
          我們每次把OPEN表F值最小的節(jié)點刪去加入到CLOSE表中。
          但是如果存在兩個節(jié)點的F值相同呢?隨機選一個。
          如此反復,直到我們將B點加入CLOSE表。
          如何得到我們的路徑呢?從B點依靠父節(jié)點向上遍歷就行了。

          注意一點。我們要保持OPEN表的有序就對了,顯然我們這里是通過F值來維持OPEN表的次序。
          而且每次添加新的節(jié)點到OPEN表時都要排序。當然這里是用降序,這樣對于數(shù)組來說更好操作。

          感謝,網(wǎng)上朋友提供的詳細的資料。

          posted on 2009-12-31 17:21 vagasnail 閱讀(405) 評論(0)  編輯  收藏 所屬分類: C\C++

          主站蜘蛛池模板: 庄浪县| 邳州市| 西吉县| 惠安县| 晋州市| 花莲市| 广元市| 阳原县| 商南县| 遂溪县| 三穗县| 高尔夫| 上栗县| 朝阳县| 垦利县| 班戈县| 合水县| 长阳| 巧家县| 海丰县| 江油市| 横峰县| 乐业县| 济南市| 卓资县| 沧源| 屏东县| 长葛市| 沂源县| 孟连| 淮阳县| 三都| 安化县| 耿马| 莱芜市| 平罗县| 定远县| 千阳县| 松江区| 沙坪坝区| 五华县|