一般来说,生成数独题目的算法如下:
- 将一行或者一列随机填上1-9,生成一个数独题目
- 根据第一步生成的数独题目运行求解算法求解
- 从解出来的题目中随机挖空若干个数字(在一定的范围内,挖空的数字越多,难度越大)
通过以上几步,就可以生成一个数独题目了,但有一点需要注意一下,
由于题目需要一定随机性,除了第一步的填充数字外,数独求解算法也要求具有一定的随机性。即对于有多个解的数独程序,不同的时候运行得出来的解也不同。要实现这样的算法并不难,将我前面的那篇文章的算法中的GetAvaibleNumbers返回值乱序一下即可。
整个思路其实还比较清晰,就是由于要求出题的随机性,需要用多次RandomShuffle算法而已。在实现了解题算法后,在此基础上实现出题算法也很容易,这里就不给出代码了。