数独生成算法设计

来源:互联网 发布:淘宝卖家的钱在哪儿看 编辑:程序博客网 时间:2024/04/30 22:22

  • 问题提出
  • 设计思路
    • 整体设计
    • 局部推演
      • 宫局部推演
      • 行局部推演
      • 列局部推演
    • 单个数字
    • 随机数推演


问题提出

数独,就是在一个大的九宫格的每一个宫中嵌套一个小的九宫格,每个九宫格或每一行或每一列的九个格子是由1-9这九个不重复的数字组成的。

数学描述:对任意数字 n,n 属于集合{1,2,3,4,5,6,7,8,9},在九宫格的每一宫、九宫格的每一行和九宫格的每一列具有唯一性。

那么如何生成这样一个九宫格?


设计思路

有三种思路,一种是从整体来看,一种是从局部推演,一种是从单个数字入手

整体设计

每个宫内的数字排列有 9! 种形式,每行数字排列有 9! 种形式,每列数字排列有 9! 种形式。

现在设计一个起始值,即一个起始情况,然后根据这个起始情况找到排列规律进行变换,得到不同的数独棋盘。

局部推演

宫局部推演

设计第一个宫,然后设计第二个宫,将所有的宫进行匹配比对,将符合的宫序列组合保存,即为一种数独棋盘。

行局部推演

与宫类似,不过现在是改成每一行,但是要注意行所涉及的宫内的数字要完整且不重复。

列局部推演

同行局部推演

单个数字

每个数字在棋盘上的位置提前固定好,即每个数字满足:必在某一宫,必在某一行,必在某一列,宫行列不重复,可以参考 n 皇后算法,但是比 n 皇后的限制要少一些

随机数推演

设计的过程就是求解的过程,先用随机数按规律生成部分数字的位置,达到一定程度后推算是否能够组成完整数独矩阵。


CSDN 辣鸡 MD 编辑器,无序列表格式全丢¡

原创粉丝点击