1.回溯算法思想
适用于解决问题的每一步都有多种选择的情况。当在某一步选择了其中一个选项时,则进入此选项,然后继续新的选择。若选择符合题目要求则此选择是正确的;若此选择不符合题目要求则此选择是不正确的,此时就需要返回上一步,重新进行选择。
一般使用递归的方式去实现递归算法。
2.回溯算法编程步骤
a. 声明访问标志位,寻找正确的起始位置;
b. 递归进入下一步,并设置递归截止条件和返回值;
c. 若递归满足条件,则继续递归,且更新访问标志位;
d. 若递归之后路径不通,则返回上一步,重新更新访问标志位;
题目一
在大矩阵中寻找符合要求的指定路径bfce
a b t g
c f c s
j d e h
#include <iostream>
#include <string>
using namespace std;
bool has_path_recursive(string matrix, string str, int rows, int cols, int row, int col, int &path_idx,bool *visited)
{
//递归终止条件,寻找到所有的路径字符串
if (str[path_idx] == '\0')
return true;
bool right_path = false;
cout << "当前访问的矩阵索引:" << row*cols + col << " " << str[path_idx] << " " << matrix[row*cols + col] << endl;
//判断是否满足

本文详细介绍了回溯算法的思想,它适用于多选择问题,通过递归方式寻找正确解。回溯算法包括声明访问标志、递归求解、路径不通则返回上一步等关键步骤。文中还给出了两个具体的实例,一个是大矩阵中寻找特定路径,另一个是在网格中找出机器人可到达的所有网格数量。

1万+

被折叠的 条评论
为什么被折叠?



