八數碼(IDA 演算法)

2022-05-05 21:30:08 字數 892 閱讀 9812

八數碼

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 找到一種最少步驟的移動方法,...