回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:
1、定义一个解空间,它包含问题的解。
2、利用适于搜索的方法组织解空间。//比如数组等
3、利用深度优先法搜索解空间。 //一般深度优先可以利用 递归实现
4、利用限界函数避免移动到不可能产生解的子空间。 //每次递归判断是否符合条件
问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。
(copy网络)
第一个问题–八皇后问题
八皇后问题是十九世纪著名数学家高斯于1850年提出的。问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。可以把八皇后问题拓展为n皇后问题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行、同一列或同一斜线上。
分析,八行,八个皇后,那么必然每一行有一个皇后,所以定义一个解空间,
比如一个数组,数组下标表示行数,元素表示每一行皇后所在的列数。上面是解空间,利用深度优先法搜索解空间,
本质上回溯就是穷举,只是多了一些条件,
每次在递归时,需要判断是否完整条件,
伪代码
map[];//解空间