A算法和A*算法詳解

字太多了 直接放筆記的圖片吧,如有不對請指正

A算法和A*算法都適用
1、用初始節點初始化搜索圖G (動態變化),將初始節點放入open表(還沒有擴展的節點)中,然後初試closed(已經擴展完成的節點)表賦空NULL
2、如果open表不爲空進入循環
    2.1 將open表中的第一個元素的指針賦給臨時變量n表示當前遍歷的節點,然後將當前節點n的指針假如到closed表表示擴展完成
    2.2 如果當前節點n是目標節點,任務完成 結束算法
    2.3 擴展當前節點n
        使用臨時集合M存儲n後面的若干個(≥1)子節點m,且m不可以是n的祖先
        將解圖G並上M,表示前一輪循環定義的解空間+當前節點所能得到的可能的後續節點
    2.4 判斷M中的節點m,
        如果m不屬於closed也不屬於open則建立m——>n的指針,並將m節點加入到open表中
        如果m屬於open,則考慮是否修改m的指針,看n節點下m的f(n)和open表中m節點f(n)的大小
        如果m屬於closed,則考慮是否修改m以及G中後裔的指針
    2.5 重新排列open表中的節點(根據估價函數)
下面是例子

圖上面邊和點的值在最後一張圖有解釋

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章