IDA*算法是在A*算法的迭代加深
A*算法主要用在bfs中,IDA*算法主要用在dfs中
先来看一道IDA*的例题
前置知识1:迭代加深
定义: 每次限定一个maxdep最大深度,使搜索树的深度不超过maxdep
for(int maxdep=1;maxdep<=题目中给的最大步数;maxdep++){
dfs(0,maxdep);//0为出入函数中当前步数,maxdep为传入的最大深度。
if(success)break;//如果搜索成功则会在dfs函数中将success赋值为1。
}
使用范围:
1.在有一定的限制条件时使用(例如本题中“如果能在15步以内(包括15步)到达目标状态,则输出步数,否则输出−1。“)。
2.题目中说输出所以解中的任何一组解。
为什么能够降低时间复杂度:
我们可能会在一个没有解(或解很深的地方无限递归然而题目中要求输出任何的一组解),所以我们限制一个深度,让它去遍历更多的分支&#x