智慧点灯&打开所有的灯-题解
题目:普及难度 DFS算法(暴力求解) 洛谷
目录
1.题目分析&推证DFS边界
2.代码实现
题目分析&推证DFS边界
读题可知,这道题求的就是最少多少步,可以打开全部灯泡
那么我们很容易可以想到使用DFS暴力枚举每一种结果,也就是模拟每一次开灯的位置
但是此处的DFS如何确定边界呢???
如样例:
点击两次(2,2)
结果还是
依次点击(2,2)(3,3)这样重复两次 结果还是
我们可以知道点击同一个地方两次,结果不会发生任何改变 (废话
这样的话就可以得出结论
对于点击一个或多个地方两次或以上次数是无用(重复)的
这样的话我们就很清晰地确定了DFS的边界
当出现已经点击过的灯时跳过
当步数step>9时结束DFS剪枝(这个好像没用)
对于实现可以使用vis标记数组,不要忘记回溯
代码实现