`
zjykzk
  • 浏览: 12583 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Sudoku (数独)和精确覆盖

阅读更多
偶然看到《谈谈 Sudoku (数独)》[1]的博文,心血来潮把文章的算法实现了一番。有关Sudoku的具体介绍可参考维基百科。

具体解法有:回溯、精确匹配。回溯解法《谈谈 Sudoku (数独)》有比较详细的阐述,所以本文只记录一下精确覆盖的解法。


精确覆盖[2]

  • 1.精确覆盖
  •      给定集合X、S、T。S是X的子集的集合,T是S的子集,如果X中每个元素都只被T中的一个元素包含,那么T就是X的精确覆盖

  • 2.精确命中(exact hitting)
  •      给定集合X、S、Y。S是X的子集的集合,Y是X的子集,如果Y中每个元素都只被S中的一个元素包含,那么Y就是S的精确命中
  • 3.表示方法
  •      列表、矩阵
  • 4.实现
  •      Knuth's Algorithm X[3],解决精确覆盖的深度优先、递归、不确定算法。
         大概思想与技巧[4]:利用矩阵的表示方法,同时把行列表示成双向环列表(Dancing Link),在删除列表中的元素时,只更新前后(上下)的相关指针值。


数度到矩阵的转换
     Algorithm X使用了矩阵的表示方法,因此在需要把数度表示成矩阵的形式。具体转换如下:假设一个给定的9 * 9数度中,有N个空格需要求解,矩阵行数R=N * 9,列数C=4 * N,该矩阵用M表示。其中:
    a.M[i][j]=1, 0<=j<N,表示第j个空格考虑行、列、块以后可以取数字i%9 + 1
    b.M[i][j]=1, N<=j<2N,表示第j个空格只考虑行的情况下可以取数字i%9 + 1
    c.M[i][j]=1, 2N<=j<3N,表示第j个空格只考虑列的情况下可以取数字i%9 + 1
    d.M[i][j]=1, 3N<=j<4N,表示第j个空格只考虑块的情况下可以取数字i%9 + 1

1.http://blog.csdn.net/Solstice/article/details/2096209
2.http://en.wikipedia.org/wiki/Exact_cover
3.http://en.wikipedia.org/wiki/Knuth%27s_Algorithm_X
4.http://lanl.arxiv.org/PS_cache/cs/pdf/0011/0011047v1.pdf
分享到:
评论

相关推荐

    Matrix Sudoku Solver软件完整版(数独智能求解源码)

    Matrix Sudoku Solver 解独矩阵是一款计算机模拟人工思路求解数独的程序。它能利用大部分的人工解法完成对简单、中等、困难、专家以及骨灰级的数独求解。玩家可以将需要求解的数独输入矩阵后,按照提示或结合逻辑...

    sudoku-solver-with-dlx:Knuth 的 Dancing Links 算法的 Java 实现,将数独谜题作为精确覆盖问题解决

    这开始是为了调查您是否可以在不完全理解问题的情况下解决问题(例如数独解谜器)(在这种情况下,不知道数独谜题是数学问题的一个例子,可以作为一种称为'精确覆盖')。 TL; 博士; 不。你可能会接近,你可能最终会...

    sudoku:使用Dancing Links(DLX)的Sudoku求解器

    该求解器实现了Knuth所描述的DLX算法,但是将数独简化为精确的覆盖问题并不是真正的完全缩减,因为它直接归结为DLX中使用的链接。 完全的减少是首先将Sudoku简化为二进制矩阵,然后创建DLX中使用的链

    java笔试题算法-Sudoku-DLX::memo:使用Knuth描述的精确覆盖+跳舞链接算法解决nxn数独谜题

    我们的教授告诉我们,对于搜索引擎,他会给我们一堆指导方针和课程来让我们开始,但不会就数独问题给我们任何东西——它被称为更“开放式”和“具有挑战性的” ' 的两人。 作为我内心受虐狂的奴隶,我决定我必须做...

    Dancing Links Sudoku-开源

    这种方法使得 Dancing Links 在解决复杂问题时,如生成数独难题,表现出色,且适用于解决具有相同性质的其他精确覆盖问题。 总的来说,这个开源项目不仅为数独爱好者提供了一种高效的解题工具,同时也为学习和研究...

    mutlidimensional-sudoku

    由于算法和数据结构通常用于精确的覆盖问题,因此该程序可用于解决其他问题,例如多义诺平铺和n-皇后问题。 处理(数独) 该程序从数独的文件中读取要求解的数据,并从matrixFile中读取包含跳舞链接矩阵的坐标的...

Global site tag (gtag.js) - Google Analytics