Loading docs/search/iterative.md +4 −4 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ 迭代加深是一种 **每次限制搜索深度的** 深度优先搜索。 它的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度 $d$ ,当 $d$ 达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度 $+1$ ,重新从根开始。 它的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度 $d$ ,当 $d$ 达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度加一,重新从根开始。 既然是为了找最优解,为什么不用 BFS 呢?我们知道 BFS 的基础是一个队列,队列的空间复杂度很大,当状态比较多或者单个状态比较大时,使用队列的 BFS 就显出了劣势。事实上,迭代加深就类似于用 DFS 方式实现的 BFS,它的空间复杂度相对较小。 Loading @@ -10,13 +10,13 @@ ## 步骤 首先设定一个较小的深度作为全局变量,进行 DFS。每进入一次 DFS,将当前深度 $d++$ ,当发现 $d$ 大于设定的深度就返回。如果在搜索的途中发现了答案就可以回溯,同时在回溯的过程中可以记录路径。如果没有发现答案,就返回到函数入口,增加设定深度,继续搜索。 首先设定一个较小的深度作为全局变量,进行 DFS。每进入一次 DFS,将当前深度加一,当发现 $d$ 大于设定的深度 $\textit{limit}$ 就返回。如果在搜索的途中发现了答案就可以回溯,同时在回溯的过程中可以记录路径。如果没有发现答案,就返回到函数入口,增加设定深度,继续搜索。 ## 代码结构 ## 代码框架 ```text IDDFS(u,d) if d>设定深度 if d>limit return else for each edge (u,v) Loading Loading
docs/search/iterative.md +4 −4 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ 迭代加深是一种 **每次限制搜索深度的** 深度优先搜索。 它的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度 $d$ ,当 $d$ 达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度 $+1$ ,重新从根开始。 它的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度 $d$ ,当 $d$ 达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度加一,重新从根开始。 既然是为了找最优解,为什么不用 BFS 呢?我们知道 BFS 的基础是一个队列,队列的空间复杂度很大,当状态比较多或者单个状态比较大时,使用队列的 BFS 就显出了劣势。事实上,迭代加深就类似于用 DFS 方式实现的 BFS,它的空间复杂度相对较小。 Loading @@ -10,13 +10,13 @@ ## 步骤 首先设定一个较小的深度作为全局变量,进行 DFS。每进入一次 DFS,将当前深度 $d++$ ,当发现 $d$ 大于设定的深度就返回。如果在搜索的途中发现了答案就可以回溯,同时在回溯的过程中可以记录路径。如果没有发现答案,就返回到函数入口,增加设定深度,继续搜索。 首先设定一个较小的深度作为全局变量,进行 DFS。每进入一次 DFS,将当前深度加一,当发现 $d$ 大于设定的深度 $\textit{limit}$ 就返回。如果在搜索的途中发现了答案就可以回溯,同时在回溯的过程中可以记录路径。如果没有发现答案,就返回到函数入口,增加设定深度,继续搜索。 ## 代码结构 ## 代码框架 ```text IDDFS(u,d) if d>设定深度 if d>limit return else for each edge (u,v) Loading