目录

深度优先搜索及其优化

大家都会

原理

深度优先搜索也就是DFS,俗称一条路走到黑,是暴力的好帮手
基本原理是找到一个没有访问过的节点,继续访问其一个子节点,不断往深处走,直到没有子节点(碰壁)后回退到上一个节点,访问它没有访问过的另一个子节点。
这样的操作可以把所有的节点按“深度优先”原则全部访问到,所以称为“深度优先搜索”。
如果用函数来实现的话会自然地形成一个栈的结构(与宽度优先搜索的队列相比较)

例题

只要你想的话每道题都是例题
经典例题有八皇后、全排列等。

优化

这是重点。
搜索是万能的,但是只有搜索是万万不能的。
这里列几个目前我所知道的优化方法。

剪枝

这个其实也比较基础,自己写DFS的时候自然而然可能就无师自通了。
大概就是把那些一看就不对的搜索方向直接剪掉。
关键是判断剪掉哪些。
例题以后补一下摸了

贪心

也叫基于贪心的启发式搜索。
就是在选择子节点的时候进行一些排序。
比较复杂点的就是A*算法

深度限制

字面意思,对深搜的深度加上一些限制,对于特定的题可以有效避免深得离谱的情况。