知识点
迭代加深:在循环执行深度受限搜索的过程中逐步增加限制值limit,直到找到解为止。
如果当前状态到最终状态的最小成本h加上当前状态深度超过了限制深度d,就可以直接中断搜索。
问题链接
问题内容
求当前16宫格如何移动成目标的16宫格。
思路
用A*或者IDA* 算法实现
代码
IDA*算法
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<string>
using namespace std;
const int row = 4;
const int maxx = 16;
const int LIMIT = 100;
struct Puzzle {
int f[maxx], space, MD;
};
const int dx[4] = { 0, -1, 0, 1 };
const int dy[4] = { 1, 0, -1 ,0 };
const char dir[4] = { 'r','u','l','d' };
int MDT[maxx][maxx];
Puzzle state;
int limit;
int path[LIMIT];
int getAllMD(Puzzle pz) {
int sum = 0;
for (int i = 0; i < maxx; i++) {
if (pz.f[i] !&#