基本认识
回溯算法(DFS 深度优先算法)实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
基本思想与原理
回溯法(DFS 深度优先算法)简单来说就是按照深度优先的顺序,穷举所有可能性的算法,但是回溯算法比暴力穷举法更高明的地方就是回溯算法可以随时判断当前状态是否符合问题的条件。一旦不符合条件,那么就退回到上一个状态,省去了继续往下探索的时间。
换句话说,回溯法可以理解为通过选择不同的岔路口寻找目的地,一个岔路口一个岔路口的去尝试找到目的地。如果走错了路,继续返回来找到岔路口的另一条路,直到找到目的地。省去了在错路上走下去的时间。
适用的问题
如果一个问题是搜索求解类的问题,而且该问题的解是树状结构(不断扩张式向量),该题就可以考虑使用回溯算法。
加粗样式
求解的步骤与模板
回溯函数的三个组成部分:
1.回溯出口:当找到了一个问题的解时,存储该解。
2.回溯主体:就是遍历当前的状态的所有子节点,并判断下一个状态是否是满足问题条件的,如果满足问题条件,那么进入下一个状态。
3.状态返回:如果当前状态不满足条件,那么返回到前一个状态。
回溯函数万能模板:
以python3为例:
def backtrack ( 参数 ):
#回溯出口
if ( 满足题意了 ):
计数或进行其他操作
return True #有时可以省略
#回溯主体
for( 查找当前节点的周围的节点 )
进行其他的操作;
标记已经搜索过的节点
backtrack( 下一次搜索的节点 )