迭代加深是一种神奇的搜索算法
TA相当于一边广搜,一边深搜
目录
算法引入
先来看一张图::
假设我们现在的目标地点是,而如果我们用深搜则可能搜到
,用广搜则可能搜到
这个时候我们就可以看出迭代加深的适用范围::
求最优解+最优解深度最小
算法思路
首先设定一个来存当前搜索的深度
然后就以为最大深度来搜索
如果搜到了答案就可以返回
如果没有搜到答案那就把加一然后重复上述操作
直到找到答案为止
伪代码
int iddfs(int 当前层数,int 最大层数) {
if(当前层数==最大层数) {
if(找到答案)
输出答案+exit(0);
不管找没找到都要return;
}
for(当前节点的每一个儿子节点)
iddfs(当前层数+1,最大层数);
}
int main() {
for(int i=最小可以从第几层开始搜;;i++)
iddfs(0,i);
}
算法分析
时间复杂度
相比较于来说要快一些,应为有
也在里面起作用,时间复杂度和
是差不多的,只是因为要回溯,所以相对慢一点
空间复杂度
空间复杂度和相同,比
好很多