生成数独终局
从九宫格的第一行开始考虑,第一行有9!=362880种排列方法,项目要求左上角第一个数为学号后两位之和模9加1(我的学号后两位为8和0,所以左上角第一个数应该为(8+0)%9+1=9),所以第一行只有8!=40320种排列方法。第一行排列确定以后,剩下八行都可以由第一行分别右移 3、6、1、4、7、2、5、8位得到。并且第二、三行,第四、五、六行,第七、八、九行之间都可以互换位置,所以一共可以生成4032026*6=2903040种数独终局,满足项目最大输出1000000种数独终局的要求。
求解数独问题
采用回溯法,依次对于每一个待填空格,先尝试填入“1”,检查是否合法,如果合法则前进至下一个待填空格,不合法则继续尝试填入2,3,…,直至合法再前进至下一个待填空格。如果在当前格子尝试了1到9都不合法,则这说明前面某个格子填错了。这时就回退到上一格,从还没试的数字里面继续试。如果退回到了第一个格子,尝试了1到9都不合法,说明当前数独无解。