`
zjykzk
  • 浏览: 12290 次
  • 性别: 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
分享到:
评论

相关推荐

    Sudoku数独益智游戏(完美版1.1.1)

    2. 具有“下一步”提示,和步骤追踪“回退”功能 3. 能够保存布局和求解进度 4. 可电脑求解“唯一解”和“所有解” 注意:本软件按照难度分为5级,其中除“最高”级外,其他4级的“电脑布局”都是唯一解。 注意:...

    sudoku 数独游戏vc源代码

    数独游戏可能包含一个显示数独盘面的网格控件,以及输入和清除单元格的按钮等。 5. **事件处理**:当用户点击某个单元格并输入数字时,程序需要捕获这个事件,并验证输入是否合法。MFC中的消息映射机制可以帮助处理...

    Sudoku数独程序编程.pdf

    在本项目中,你们将被要求编程实现一个Sudoku数独程序。这个任务的主要目标是提升你们在逻辑和设计方面的问题解决能力,并通过一个有趣的谜题来加深对数组结构、文件输入/输出以及多命令应用的理解。在此过程中,...

    精彩数独智力游戏sudoku

    本项目“精彩数独智力游戏sudoku”是用C++编程语言实现的一个数独游戏软件。C++是一种通用的、面向对象的编程语言,它继承了C语言的强大功能,并添加了类、模板等面向对象的特性,使得开发高效且复杂的应用程序成为...

    谜题游戏Sudoku数独游戏

    数独(Sudoku)是一种基于逻辑的数字填充游戏,源自18世纪的瑞士,由美国报纸在20世纪90年代普及,现已成为全球最受欢迎的智力挑战游戏之一。这款名为"谜题游戏Sudoku数独游戏"的应用,显然是为Android平台设计的...

    CW Sudoku 数独 I 简体中文正式版

    “数独”(Su Doku)是你和方格之间意志的较量,你不需要大部头词典的帮助,也无需去书店查阅参考书籍,你所需要的东西已经全部在你的大脑中了。在这个精彩旅程中,只有你和“数独”。 这款小游戏或称之为...

    Sudoku数独

    总之,Sudoku数独程序利用计算机的优势,将传统纸笔游戏数字化,让玩家能够更便捷地享受解谜的乐趣,同时也为学习和研究数独提供了强大的工具。无论是从算法设计、界面交互还是用户体验的角度,这样的程序都具有很高...

    sudoku数独九宫格

    数独是一种广受欢迎的逻辑游戏,它源自日本,但其英文名"Sudoku"并非日语词汇,而是由“Su”(数字)和“Doku”(单一)两个日语词组合而成,意为“单一的数字”。这个游戏在全球范围内拥有大量的爱好者,因为它既...

    Java SuDoKu数独游戏.rar

    这个"Java SuDoKu数独游戏.rar"是一个基于Java的数独游戏实现,特别适用于J2ME(Java 2 Micro Edition)平台,这意味着它可以运行在支持Java的移动设备上,如早期的智能手机。 Java是面向对象的编程语言,其跨平台...

    数独验证器_sudoku验证器_数独验证_数独_

    数独是一种广受欢迎的逻辑游戏,它通过填充一个9×9的网格,使得每一行、每一列以及每一个3×3的小宫格内都包含从1到9的所有数字且每个数字不重复,以此来锻炼玩家的逻辑思维和推理能力。本项目提供了一个数独验证器...

    Sudoku数独/九宫格游戏(完美版1.2.1)

    本游戏界面简洁,功能完善,堪称数独游戏的完美版本: 1. 按照5级难度自动布局或手工布局,并具有计时功能 2. 具有“下一步”提示,和步骤追踪“回退”功能 3. 能够保存布局和求解进度 4. 可电脑求解“唯一解”和...

    Sudoku数独算法

    数独算法是解决数独问题的方法,尤其对于计算机程序而言,它能有效地生成和解决任意难度的数独谜题。 一、基础算法:回溯法 数独的基础解法通常是采用回溯法,这是一种试错的方法。首先,对数独盘面进行扫描,找到...

    数独sudoku

    数独sudoku:整个矩阵由为9*9的矩阵,矩阵中又分成9个3*3的小矩阵,在每个方格中填入1-9 的数字,必须符合列中无重复数字,行中无重复数字,小矩阵中无重复数字 本游戏介绍: 1、游戏模式 a、练习模式,无计时,...

    The Mathematics of Sudoku (数独)

    这是一篇关于数独游戏算法的文章,希望对喜爱数独游戏的编程朋友有所帮助。英文版 This is an essay of The Mathematics of Sudoku. Hoping this paper is useful for game programmer.

    javascript sudoku 数独智力游戏生成代码

    JavaScript Sudoku 数独智力游戏生成代码主要涉及了如何用JavaScript编写一个程序来创建数独游戏。数独是一种逻辑填数游戏,目标是在9×9的网格中填入数字,使得每一行、每一列以及九个3×3的子网格中的数字都不重复...

    数独 Sudoku.Up.chs.rar 汉化版

    九宫格数独,是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的...这种游戏全面考验做题者观察能力和推理能力,虽然玩法简单,但数字排列方式却千变万化,所以不少教育者认为数独是训练头脑的绝佳方式。

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

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

    j2me开发的SuDoKu(数独)游戏

    《基于J2ME的SuDoKu(数独)游戏开发详解》 数独,一个源自日本的逻辑推理游戏,以其独特的魅力在全球范围内广受欢迎。本文将深入探讨如何使用Java Micro Edition (J2ME) 技术在移动设备上开发一款240X320像素屏幕...

Global site tag (gtag.js) - Google Analytics