回溯算法
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯 条件 的某个 状态 的点称为“回溯点”。 皇后问题: 八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 class NQueensII { public: int* x;//当前解 int N;//皇后个数 int sum = 0;//当前已找到的可行方案数 int totalNQueens(int n) { N = n; x = new int[N + 1]; backTrace(1); return sum; } /** * col行这个点,x[col]列这个点,与已经存在的几个皇后,是否符合要求,放到这个位置上, * @param col * @return */ bool place(int col) { for (int i = 1; i < col; i++) { if (abs(col - i) == abs(x[col] - x[i]) || x[col] == x[i]) { return false; } } return true; } void