迭代加深搜索
1、含义
迭代加深搜索是一种每次限制搜索深度的深度优先搜索。
2、例题
整数变换问题
刚开始看到最少变换次数,果断选择BFS,结果MLE。
Q1:为什么使用BFS会爆内存?
①搜索树过深或者过宽;②BFS的实现基础是队列,队列的空间复杂度很大。
Q2:有何替代解决方法?
①时间换空间:使用迭代加深搜索求解问题。
//AC代码
#include<bits/stdc++.h>
using namespace std;
int x, m, dep;
string ans;
bool dfs(int d, int n){
if(d > dep) return false;
if(n == m) return true;
if(dfs(d + 1, n * 3)){
ans += "f";
return true;
}
if(dfs(d + 1,n / 2)){
ans += "g";
return true;
}
return false;
}
signed main(){
cin >> x >> m;
dep = 1;
while(!dfs(0, x)) dep ++;
cout << ans.size() << endl;
cout << ans;
return 0;
}
3、迭代加深搜索
- 当搜索树的分枝较多时,≈BFS
- 使用:
- 寻求最优解,确定最优解在某一深度
- 缺点:比较慢
//伪代码
IDDFS(u,d)
if d>limit //limit为给定深度,d为当前深度
return
else
for each edge (u,v) //找到答案,不需要更新limit;否则继续增大limit
IDDFS(v,d+1)
return