回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:

    • 找到一个可能存在的正确的答案;
    • 在尝试了所有可能的分步方法后宣告该问题没有答案。

    深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。这个算法会 尽可能深 的搜索树的分支。当结点 v 的所在边都己被探寻过,搜索将回溯到发现结点 v 的那条边的起始结点。这一过程一直进行到已发现从源结点可达的所有结点为止。如果还存在未被发现的结点,则选择其中一个作为源结点并重复以上过程,整个进程反复进行直到所有结点都被访问为止。
    一句话来说,回溯其实就是横向遍历,纵向递归的组合。

    • 难点:什么时候for循环中用current变量,什么时候用vis(used)数组?
    • 当要出输出的要讲求顺序如 [2,2,3]和 [2,3,2]属于不同的组合时,使用vis数组并且for循环中以0开始
    • 当要求输出的不讲求顺序如 [2,2,3]和 [2,3,2] 属于相同的组合时,for循环中使用current变量