回溯法

本文详细介绍了回溯法的基本概念及其与深度优先搜索的关系,对比了两者的不同之处,并给出了递归回溯法的具体算法框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回溯法

一、回溯法

 “回溯法”也称“试探法”。它是从问题的某一状态出发,不断“试探”着往前走一步,当一条路走到“尽头”不能再前进(拓展出新状态)的时候,再倒回一步或者若干步,从另一种可能的状态出发,继续搜索,直到所有的“路径(状态)”都一试探过。这种不断前进、不断回溯,寻找解的方法,称为“回溯法”。
 深度优先搜索求解的时候,当找到目标结点之后,还要回头寻找初始结点到目标结点的解路径。而回溯法则不同,找到目标结点之后,搜索路径就是一条从初始结点到目标结点的解路径。回溯法实际上是状态空间搜索中,深度优先搜索的一种改进,是更实用的一种搜索求解方法。

二、深度优先搜索与回溯法的关系

1、深度优先搜索包含回溯,或者说回溯法是深度优先搜索的一种;
2、深度优先搜索需要控制如何实现状态之间的转移(拓展),回溯法就是深度优先搜索的一种控制策略;
3、回溯的过程中,并不需要记录整棵“搜索树”,而只需记录从初始状态到当前状态的一条搜索路径,是“线性链状”的,其最大优点是占用空间少;
4、深度优先搜索可以采用递归(系统栈)和非递归(手工栈)两种方法实现。递归搜索是系统栈实现一部分的回溯(如果需要记录一些特殊信息或较多的信息,还需要另外手工记录),而非递归是自己用手工栈模拟回溯的过程,所以实现起来略为复杂一点。

三、算法框架

1、递归回溯法算法框架[一]

int dfs(int k) {
    for (int i = 1; i <= 算符种数; i++) {
        if (满足条件) {
            保存结果
            if (到目的地) 输出解;
            else dfs(k+1);
            恢复:保存结果之前的状态{回溯一步}
        }
    }
}

2、递归回溯法算法框架[二]

int dfs(int k) {
    if (到目的地) 输出解;
    else {
        for (int i = 1; i <= 算符种数; i++) {
            if (满足条件) {
                保存结果;
                dfs(k+1);
                恢复:保存结果之前的状态{回溯一步}
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值