该文主要介绍用IDA*算法实现八数码问题
IDA*算法即迭代加深的A*算法,实现代码是最简练的,无须状态判重,无需估价排序
IDA*大部分时候比A*还要快,可以说是A*的一个优化版本!
/*
POJ 1077 Eight
C++
Memory 168K
Time 32MS
*/
#include <iostream>
#include <string>
using namespace std;
const unsigned int M = 1001;
int dir[4][2] = {
1, 0, // Down
-1, 0, // Up
0,-1, // Left
0, 1 // Right
};
typedef struct STATUS{
int data[3][3];
int r,c;//0所在的位置
}STATUS;
char dirCode[] = {"dulr"};
char rDirCode[] = {"udrl"};
char path[M]; // 最优解
STATUS start, goal = { 1,2,3,4,5,6,7,8,0,2,2 }; // 起始和终止状态
int maxDepth = 0; // 深度边界
//计算h值,作为IDAstar算法的评估函数
int dist(STATUS suc, STATUS goal, int k) {//计算方格的错位距离
int si,sj,gi,gj; //si,sj表示suc中k所处位置,gi,gj表示goal中k所处的位置
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
if(suc.data[i][j]==k){
s