前言
回溯算法这个系列我们之前已经总结过, 现在复习一下
- 回溯算法是一种暴力的搜索算法, 坦白来讲就是穷举
- 一般来说这些问题遇上了首先应当考虑回溯:
- 组合问题:给定有n个整数的集合, 从中选出所有包含 k个 数的组合
- 排列问题:给定有n个整数的集合, 求n个数的所有的排列方式
- 子集问题:给定有n个整数的集合, 求其所有子集
- 切割问题:按一定规则对字符串进行切割, 求所有切割方式
- 棋盘问题:N皇后, 数独等等, 求所有解
- 回溯算法的本质是树形问题, 所有的回溯算法都可以通过树形结构来分析
- 回溯的关键部分用到递归, 因此和递归一样, 考虑问题时只管当下
- 回溯解题步骤(事实上还是递归的解题步骤)
- 确立backTracking函数的参数和功能
- 确立终止条件
- 确定当前需要处理的所有可能值
例题: 解数独
题目描述:编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:
- 数字 1-9 在每一行只能出现一次
- 数字 1-9 在每一列只能出现一次
- 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次
数独部分空格内已填入了数字,空白格用 '.' 表示
题目链接: