回溯算法

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

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

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;
	//判断是否满足
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值