偶然看到《谈谈 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
分享到:
相关推荐
2. 具有“下一步”提示,和步骤追踪“回退”功能 3. 能够保存布局和求解进度 4. 可电脑求解“唯一解”和“所有解” 注意:本软件按照难度分为5级,其中除“最高”级外,其他4级的“电脑布局”都是唯一解。 注意:...
数独游戏可能包含一个显示数独盘面的网格控件,以及输入和清除单元格的按钮等。 5. **事件处理**:当用户点击某个单元格并输入数字时,程序需要捕获这个事件,并验证输入是否合法。MFC中的消息映射机制可以帮助处理...
在本项目中,你们将被要求编程实现一个Sudoku数独程序。这个任务的主要目标是提升你们在逻辑和设计方面的问题解决能力,并通过一个有趣的谜题来加深对数组结构、文件输入/输出以及多命令应用的理解。在此过程中,...
本项目“精彩数独智力游戏sudoku”是用C++编程语言实现的一个数独游戏软件。C++是一种通用的、面向对象的编程语言,它继承了C语言的强大功能,并添加了类、模板等面向对象的特性,使得开发高效且复杂的应用程序成为...
数独(Sudoku)是一种基于逻辑的数字填充游戏,源自18世纪的瑞士,由美国报纸在20世纪90年代普及,现已成为全球最受欢迎的智力挑战游戏之一。这款名为"谜题游戏Sudoku数独游戏"的应用,显然是为Android平台设计的...
“数独”(Su Doku)是你和方格之间意志的较量,你不需要大部头词典的帮助,也无需去书店查阅参考书籍,你所需要的东西已经全部在你的大脑中了。在这个精彩旅程中,只有你和“数独”。 这款小游戏或称之为...
总之,Sudoku数独程序利用计算机的优势,将传统纸笔游戏数字化,让玩家能够更便捷地享受解谜的乐趣,同时也为学习和研究数独提供了强大的工具。无论是从算法设计、界面交互还是用户体验的角度,这样的程序都具有很高...
数独是一种广受欢迎的逻辑游戏,它源自日本,但其英文名"Sudoku"并非日语词汇,而是由“Su”(数字)和“Doku”(单一)两个日语词组合而成,意为“单一的数字”。这个游戏在全球范围内拥有大量的爱好者,因为它既...
这个"Java SuDoKu数独游戏.rar"是一个基于Java的数独游戏实现,特别适用于J2ME(Java 2 Micro Edition)平台,这意味着它可以运行在支持Java的移动设备上,如早期的智能手机。 Java是面向对象的编程语言,其跨平台...
数独是一种广受欢迎的逻辑游戏,它通过填充一个9×9的网格,使得每一行、每一列以及每一个3×3的小宫格内都包含从1到9的所有数字且每个数字不重复,以此来锻炼玩家的逻辑思维和推理能力。本项目提供了一个数独验证器...
本游戏界面简洁,功能完善,堪称数独游戏的完美版本: 1. 按照5级难度自动布局或手工布局,并具有计时功能 2. 具有“下一步”提示,和步骤追踪“回退”功能 3. 能够保存布局和求解进度 4. 可电脑求解“唯一解”和...
数独算法是解决数独问题的方法,尤其对于计算机程序而言,它能有效地生成和解决任意难度的数独谜题。 一、基础算法:回溯法 数独的基础解法通常是采用回溯法,这是一种试错的方法。首先,对数独盘面进行扫描,找到...
数独sudoku:整个矩阵由为9*9的矩阵,矩阵中又分成9个3*3的小矩阵,在每个方格中填入1-9 的数字,必须符合列中无重复数字,行中无重复数字,小矩阵中无重复数字 本游戏介绍: 1、游戏模式 a、练习模式,无计时,...
这是一篇关于数独游戏算法的文章,希望对喜爱数独游戏的编程朋友有所帮助。英文版 This is an essay of The Mathematics of Sudoku. Hoping this paper is useful for game programmer.
JavaScript Sudoku 数独智力游戏生成代码主要涉及了如何用JavaScript编写一个程序来创建数独游戏。数独是一种逻辑填数游戏,目标是在9×9的网格中填入数字,使得每一行、每一列以及九个3×3的子网格中的数字都不重复...
九宫格数独,是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的...这种游戏全面考验做题者观察能力和推理能力,虽然玩法简单,但数字排列方式却千变万化,所以不少教育者认为数独是训练头脑的绝佳方式。
Matrix Sudoku Solver 解独矩阵是一款计算机模拟人工思路求解数独的程序。它能利用大部分的人工解法完成对简单、中等、困难、专家以及骨灰级的数独求解。玩家可以将需要求解的数独输入矩阵后,按照提示或结合逻辑...
《基于J2ME的SuDoKu(数独)游戏开发详解》 数独,一个源自日本的逻辑推理游戏,以其独特的魅力在全球范围内广受欢迎。本文将深入探讨如何使用Java Micro Edition (J2ME) 技术在移动设备上开发一款240X320像素屏幕...