一:概述
DFS是我们常用的一种算法,但我们通常会因为它的高复杂度而却步。这时,合理利用剪枝就可以大大提高DFS的速度。
二:常见DFS优化策略
1:优化搜索顺序
ex:N个人同时过河,每条船载重M,问最少要几条船?
正常的DFS是大约搜索,但我们考虑一下搜索顺序,如果我们从重量最大的人开始搜 索,那搜索分支就会减少许多。
2:最优性剪枝
ex:我们搜索一种状态,搜索出答案为100,但是之前已经搜出了答案为50的状态,那当前这个状态就可以被剪枝。
3:可行性剪枝:
ex:当前这种状态已经不能再持续下去,则对其剪枝。
4:排除等效冗余:
ex:有多种情况等效,则剪枝。
三:实战演练:
(一):题目传送门
一般化思路:考虑优化搜索顺序:将小猫质量从最大到最小排序,以此搜索。
最优性剪枝:当前遍历出的船数多于之前所找最优解,则剪枝。
AC代码: