======深度优先搜索及其优化====== 大家都会 =====原理===== 深度优先搜索也就是DFS,俗称一条路走到黑,是暴力的好帮手。\\ 基本原理是找到一个没有访问过的节点,继续访问其一个子节点,不断往深处走,直到没有子节点(碰壁)后回退到上一个节点,访问它没有访问过的另一个子节点。\\ 这样的操作可以把所有的节点按“深度优先”原则全部访问到,所以称为“深度优先搜索”。\\ 如果用函数来实现的话会自然地形成一个栈的结构(与[[2020-2021:teams:no_morning_training:weekly:宽度优先搜索及其优化|宽度优先搜索]]的队列相比较)\\ =====例题===== 只要你想的话每道题都是例题\\ 经典例题有八皇后、全排列等。\\ =====优化===== 这是重点。\\ 搜索是万能的,但是只有搜索是万万不能的。\\ 这里列几个目前我所知道的优化方法。\\ ====剪枝==== 这个其实也比较基础,自己写DFS的时候自然而然可能就无师自通了。\\ 大概就是把那些一看就不对的搜索方向直接剪掉。\\ 关键是判断剪掉哪些。\\ 例题以后补一下摸了 ====贪心==== 也叫基于贪心的启发式搜索。\\ 就是在选择子节点的时候进行一些排序。\\ 比较复杂点的就是[[A*算法]]\\ ====深度限制==== 字面意思,对深搜的深度加上一些限制,对于特定的题可以有效避免深得离谱的情况。