解数独(回溯法)
数独问题是一个经典的回溯法问题。给定一个 9x9 的数独棋盘,其中部分格子已经填入数字(1-9),空白格子用 '.'
表示。目标是填充空白格子,使得每一行、每一列以及每个 3x3 的宫内都包含数字 1-9,且每个数字只能出现一次。
1. 算法原理
回溯法的核心思想是系统地搜索所有可能的解空间,并通过剪枝策略提前排除不可能产生有效解的分支。对于数独问题,回溯法的步骤如下:
逐个格子填充:
- 从第一个空白格子开始,尝试填入数字 1-9。
- 使用双重循环遍历棋盘的行和列,找到第一个空白格子。
递归尝试所有可能性:
- 对于每个空白格子,尝试填入数字 1-9。
- 检查填入的数字是否合法(即不违反数独的规则)。
- 如果合法,则递归地尝试填充下一个空白格子。
- 如果递归调用返回
true
,则说明找到了一组解,立即返回true
。 - 如果不合法或递归调用返回
false
,则撤销当前填入的数字(回溯),并尝试下一个数字。
剪枝策略:
- 如果当前格子无法填入任何数字(1-9 都不合法),则返回
false
,进行回溯。
结束条件:
- 当所有格子都成功填入数字时,返回
true
。
2. 算法步骤
初始化:
- 输入数独棋盘