回溯算法是一种解决问题的算法,它使用蛮力方法来查找所需的输出。
蛮力方法会尝试所有可能的解决方案,然后选择所需/最佳解决方案。
术语“回溯”表示如果当前解决方案不合适,则回溯并尝试其他解决方案。因此,在此方法中使用了递归。
此方法用于解决具有多种解决方案的问题。如果需要最佳解决方案,则必须进行动态编程。
状态空间树
空间状态树是表示问题的所有可能状态(解决方案或非解决方案)的树,该问题从根作为初始状态到叶作为终端状态。
回溯算法
Backtrack(x)
if x is not a solution
return false
if x is a new solution
add to list of solutions
backtrack(expand x)
回溯方法示例
问题:您想找到所有可能的方式在3个长凳上安排2个男孩和1个女孩。约束:女孩不应该坐在中间的长凳上。
解决方案:共有3个! = 6种可能性。我们将尝试所有可能性并获得可能的解决方案。我们递归地尝试所有可能性。
所有可能性是:
以下状态空间树显示了可能的解决方案。
回溯算法应用
- 查找图中存在的所有汉密尔顿路径。
- 解决了N皇后的问题。
- 迷宫解决问题。
- 骑士的旅行问题。