概念
回溯法(back tracking)(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
实例一:八皇后问题
#include <iostream>
#include <vector>
using namespace std;
int res=0;
//判断是否满足皇后规则
bool isOk(vector<int>& queenVec, int row) {
for (int i = 0; i < row; ++i) { //将当前第row个皇后与前row-1个皇后的站位比较
if (queenVec[row] == queenVec[i] || (queenVec[row] + row) == (queenVec[i] + i) || (queenVec[row] - row) == (queenVec[i] - i))
return false;
}
return true;
}
void backtracking(vector<int>& queenVec, int row, int n) {
if (row == n) {
res++;
retu