结合 DFS 的极低空间复杂度 $O(d)$ 与 BFS 的最短路时间完备性,通过深度限制递增实现时空平衡
宽度优先搜索 (BFS) 占用内存极大 $O(b^d)$,容易发生内存溢出 (MLE);深度优先搜索 (DFS) 内存极小 $O(d)$ 但容易深陷无穷分支,且找到的解不一定是最短路径。迭代加深搜索 (IDS) 完美吸取了两者的所有优势。
IDS 本质上是带有深度限制的 DFS,通过不断放宽搜索深度限制 $D$ 来层层探寻:
current_depth > D,立刻进行剪枝强制回溯。bool dfs(int u, int depth, int limit) {
if (depth > limit) {
return false; // 💥 触及当前层深度限制,强制返回!
}
if (u == target) return true; // 寻获目标!
for (int v : adj[u]) {
if (dfs(v, depth + 1, limit)) return true;
}
return false;
}
void solve() {
// 迭代加深:逐层递增搜索深度上限
for (int limit = 0; limit <= max_depth; limit++) {
if (dfs(root, 0, limit)) {
cout << "Goal Found at limit: " << limit;
return;
}
}
}