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;
//判断是否满足