📜  回溯算法

📅  最后修改于: 2020-09-27 16:50:03             🧑  作者: Mango

在本教程中,您将学习什么是回溯算法。此外,您还将找到回溯方法的示例。

回溯算法是一种解决问题的算法,它使用蛮力方法来查找所需的输出。

蛮力方法会尝试所有可能的解决方案,然后选择所需/最佳解决方案。

术语“回溯”表示如果当前解决方案不合适,则回溯并尝试其他解决方案。因此,在此方法中使用了递归。

此方法用于解决具有多种解决方案的问题。如果需要最佳解决方案,则必须进行动态编程。


状态空间树

空间状态树是表示问题的所有可能状态(解决方案或非解决方案)的树,该问题从根作为初始状态到叶作为终端状态。

State Space Tree
状态空间树

回溯算法

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种可能性。我们将尝试所有可能性并获得可能的解决方案。我们递归地尝试所有可能性。

所有可能性是:

All the possibilities
所有可能性

以下状态空间树显示了可能的解决方案。

State state tree
状态树与所有解决方案

回溯算法应用

  1. 查找图中存在的所有汉密尔顿路径。
  2. 解决了N皇后的问题。
  3. 迷宫解决问题。
  4. 骑士的旅行问题。