算法学习笔记 之回溯算法

这篇博客详细探讨了回溯算法的原理与应用,是算法学习笔记的一部分,为读者提供了全面的回溯算法框架。
摘要由CSDN通过智能技术生成

算法学习笔记 之回溯

在阅读《labuladong的算法小抄》,顺便做学习笔记。
回溯算法和二叉树有很密切的关系,解决一个回溯问题,其实也就是对一个决策树进行遍历的过程。
需要关注三个问题:
	1 路径:也就是已经做出的选择;
	2  选择列表:还可以做出什么选择;
	3 结束条件:也就是达到决策树底层,没有再做选择的机会或者必要了;

整体的框架如下:

result = []
def backtrack(路径, 选择列表)if 满足结束条件
			result.add(路径)
			return
			
	for 选择 in 选择列表 :
		做选择
		backtrack(路径_new,选择列表_new)
		撤销选择
其中for循环里的递归式算法的核心,在递归调用之前做选择,在递归调用之后撤销选择。下面就用N皇后问题来带入框架试一下。
依次分析需要关注的三个问题,首先第一点“路劲”,已经走过的路,做过的选择,也就是前面某些个Queen放置的情况;第二点“选择”,也就是要在当前这一行的哪一个位置放置Queen;第三点“结束条件”,也就是什么时候算放完了,当棋盘的每一行都有Queen就认为结束了,棋盘的size是N;
套用框架使用C++来实现:
vector<vector<string>> res;
// 函数签名
vector<vector<string>> SloveNQueen(int n)
{
   
	// 初始化空棋盘 '.'表示空, 'Q'表示皇后
	vector<string> board (n, string(n, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值