题目
此题根据题目可知是迭代加深搜索。
首先应该枚举空格的位置,让空格像一个马一样移动。
但迭代加深搜索之后时间复杂度还是非常的高,根本过不了题。
感觉也想不出什么减枝,于是便要用到了乐观估计函数(Optimistic Estimation Function)
以3种颜色的格子来表示原棋盘:
如果我们要从一个状态抵达到原棋盘,那么需要的步数绝对是小于当前状态与原棋盘不同的格子的数量、
那么我们的乐观估计函数就出来了。如果当前状态与原棋盘的不同格子数量小于我们的剩余的步数,那么肯定是抵达不了的,return回去就行。
代码
#include <iostream>
#include <cstring>
using namespace std;
#define N 510
int dir[8][2]={
{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,-2},{-1,2}};
int fuck[10][10]={
{0,0,0,0,0,0},{0,1,1,1,1,1},{0,0,1,1,1,1},{0,0,0,2,1,1},{0,0,0,0,0,1}};
int a[10][10]