题意是给你两个八数码,让你输出从第一个八数码到第二个八数码的最短路径,且要求该路径也是最短路径下的字典序最小的路径。
思路:我一开始以为只是简单的在结构体判定一下,让其按照字典序最小的顺序去寻路,后来发现这样做的后果是路径不是最小,嗯。于是就上网查博客,然后就学会了A*算法的升级版IDA A*算法,在这里简单的说一下也加深一下自己的印象:ida算法是A*算法的进化版,它舍弃了a*算法的空间消耗,没有维护判定点和未判定点的数组,而是先按照一个限定值,在这个限定值下去查找,如果在这个限定值下找到解,那么这个解一定是最优解,如果找不到,那么扩大限定值,重复,这样就对空间进行了优化,同时通过迭代加深搜索的剪枝,在某些题,时间出奇的好。
更加详细的请:https://blog.csdn.net/urecvbnkuhbh_54245df/article/details/5856756。
代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<vector>
#include<cstring>
#include<stack>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int m[20];
int posgoal[20];//用来储存第二个