生成终局
其实我初读题目之时并没有什么思路,唯一想到的暴力搜索显然不能够符合题意。经过上网查阅相关资料以及往届学长的博客,我发现了一个非常厉害的方法——当确定第一行的排列之后,可以将后面的每一行向右平移不同的单位,得到每一列均不重复的组合,此时再考虑每一宫的情况,为保证每一宫内不重复,只要前三行、中三行、后三行之内无重复即可,因此将三行分为一组,需要控制每组内右移单位相差3。
由此总结得到一个全排列+平移变换结合的方式:
1)首先根据题目要求,由我的学号确定第一行的固定数字(1 + 3)% 9 + 1 = 5。
2)在固定一个数字的基础上对剩余8个位置全排列,即8!个
3)每三行分为一组按如下规则做平移操作:
- 对第1行平移3、6或6、3个位置得到,即“036”、“063”平移转换
- 对第4、5、6行做“147”六种组合方式的平移转换
- 对第7、8、9行做“258”六种组合方式的平移转换
求解数独
这里想到的方法就是回溯法,对该处位置进行判断,若判断合法则继续,否则回溯,直到处理完全。