字太多了 直接放筆記的圖片吧,如有不對請指正
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表中的節點(根據估價函數)
下面是例子
圖上面邊和點的值在最後一張圖有解釋