八數碼
ida*就是迭代加深和a*估價的結合
在迭代加深的過程中,用估計函式剪枝優化
並以比較優秀的順序進行擴充套件,保證最早搜到最優解
需要空間比較小,有時跑得比a*還要快
#include#include#include
#include
#include
using
namespace
std;
intnum,cnt,x,y;
int zx[5]=,zy[5]=;//
1上,2左,3下,4右
int c[4][4
];inline
void
read()
}}int de[9][2]=,,,,,,,,}; //de[i][0/1]表示數字i在目標狀態的橫、縱座標
inline
int close() //
笛卡爾距離之和
inline
void dfs(int t,int
pre)
//puts("");
int clo=close();
if(clo==0
)
if(t+clo>cnt) return
;
for(register int i=1;i<=4;i++)
if(((i+1)%4+1)!=pre) //
若i與pre不互逆 ,便擴充套件
x-=zx[i];y-=zy[i];
}}int
main()
// 加上 register 160ms
// 不加 register 108ms
// 開o2 40ms
八數碼的A 與IDA 演算法 搜尋高階練習1
hdu1043 poj1077 題意 眾所周知的八數碼問題,就不再描述了。不得不說,為了練習a 以及ida 就直接看題解了。了解之後分析如下。解題報告 先談a a 是一種 啟發式搜尋,也就是說在每次搜尋前,先進行在狀態空間中對每乙個搜尋的位置通過f n g n h n 進行評估,得到最好的位置,再從...
IDA 演算法解決十五數碼問題
原稿 ida 演算法是a 演算法和迭代加深演算法的結合.a 演算法需要維護open表和close表,以及排序選擇最小代價的結點記憶體空間消耗過多。ida 的答題思路是。首先 根據最初的數碼表 5 1 2 4 9 6 3 8 13 15 10 11 14 0 7 12 目標狀態 1 2 3 4 5 6...
洛谷 八數碼難題 BFS 啟發式(IDA
初見安 這裡是傳送門 洛谷p1379。在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布局 初始狀態 和目標布局 為了使題目簡單,設目標狀態為123804765 找到一種最少步驟的移動方法,...