回溯(dfs)
result = []  
def backtrack(路径, 选择列表):  
    if 满足结束条件:  
        result.add(路径)  
        return  
    for 选择 in 选择列表:  
        做选择  
        backtrack(路径, 选择列表)  
        撤销选择
由递归函数的定义可以看见,【路径】是函数的形参,随着函数的入栈在不停地添加值,或出栈而删除值,路径就像一根触手,去试探地触摸每一个结点(做决策),如果不满足要求,则将触手收回来,去摸另一个结点,因为这种回收动作的特性,这种方法称之为回溯。