引用:https://zhuanlan.zhihu.com/p/93530380
解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:
1、路径:也就是已经做出的选择。
2、选择列表:也就是你当前可以做的选择。
3、结束条件:也就是到达决策树底层,无法再做选择的条件。
核心思路:我们只要在递归之前做出选择,在递归之后撤销刚才的选择
解决n皇后问题
function getsolve(solves, solve, rowindex, n) { if (rowindex >= n) { solves.push(solve) return } for (let i = 0; i < n; i++) { //排除不合法的放置 if (rowExitQueen(rowindex, solve) || lineExitQueen(i, solve, n) || SlashExitQueen(rowindex, i, solve, n)) { continue } //放置 solve[rowindex] = i; //进入下一层 getsolve(solves, clone(solve), rowindex + 1, n) //取消放置 solve[rowindex] = undefined } } let resultArr = [] let solves = []; getsolve(solves, {}, 0, n) solves.forEach(solve => { resultArr.push(getSolveResult(solve, n)) }) return resultArr