什么时候需要回溯:
DFS的本质是每一步做选择,当这个选择可做可不做(比如迷宫,这一步可以走,也可以不走),要在递归之后回溯。
如果状态用参数传递的话,也可以直接改变参数,这一步相当于回溯(因为调用时没有改变原有参数的值)
等价于
如迷宫问题
什么时候不需要回溯:
当遇到一个选择时,一定要对它操作时,那么就不需要回溯。比如要标记求所有情况,找到了就要标记。如果取消标记,那么就会重复计算。
例:求连通块的个数
1表示陆地,0表示海洋
求马的覆盖点:
马的覆盖点_YRZ-James的博客
标记马三步内可能走过的所有点,搜索到一种情况就要标记,所以不用回溯
注:一个位置可以多次访问,所以不用vis标记去重
例:机器人的运动范围