HDU3567 进阶搜索 IDA*算法 八数码【经典】

本文探讨了如何使用IDA*算法解决从一个八数码状态到达另一个目标状态的最短且字典序最小的路径问题。通过对比简单字典序策略的不足,介绍了IDA*算法的优势,包括空间优化和迭代加深搜索的剪枝策略。详细解释和代码实现可在链接中查看。
摘要由CSDN通过智能技术生成

题意是给你两个八数码,让你输出从第一个八数码到第二个八数码的最短路径,且要求该路径也是最短路径下的字典序最小的路径。

思路:我一开始以为只是简单的在结构体判定一下,让其按照字典序最小的顺序去寻路,后来发现这样做的后果是路径不是最小,嗯。于是就上网查博客,然后就学会了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];//用来储存第二个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值