① 基于SAT的数独游戏求解程序,求C语言代码
用0代表要填的数
#include <stdio.h>
#include <stdlib.h>
#define SIZE 9
#define get_low_bit(x) ((~x&(x-1))+1)
struct{
int left;
char num;
char try;
}board[SIZE][SIZE];
int bit2num(int bit)
{
switch(bit){
case 16:
case 256:
return 9;
基础解法
排除法(摒除法)
摒除法:用数字去找单元内唯一可填空格,称为摒除法,数字可填唯一空格称为排除法 (Hidden Single)。
根据不同的作用范围,摒余解可分为下述三种:
数字可填唯一空格在“宫”单元称为宫排除(Hidden Single in Box),也称宫摒除法。
数字可填唯一空格在“行”单元称为行排除法(Hidden Single in Row),也称行摒除法。
有啊,而且各种语言基本都有。
其中比较经典的舞蹈链算法对常见的标准数独来说简直就是秒解!甚至每秒解几千个几万个。
③ 数独的计算公式是什么
数独的计算公式是每一横行、每一竖行和每一斜行的和都等于15。
④ 数独的一般解法
516274398
793568412
824391765
451637289
372189654
968452137
235846971
649715823
187923546
-----------
举例说明你的问题:
如图,红色宫内的9应该填在哪里?
就要用到你所说的第4步。利用相对称的两个数组合3和5,来确定B5、B6两个空格只能为35或53.从而排除B5、B6为9的可能。
红色宫内的9填在哪里,应该清楚了吧。
⑤ 计算数独有什么方法
数独解法全是由规则衍生出来的,基本解法分为两类思路,一类为排除法,一类为唯一法。更复杂的解法,最终也会归结到这两大类中。 基础摒除法 基础摒除法就是利用1 ~ 9 的数字在每一行、每一列、每一宫都只能出现一次的规则进行解题的方法。基础摒除法可以分为行摒除、列摒除、九宫格摒除。 实际寻找解的过程为: 寻找九宫格摒除解:找到了某数在某一个九宫格可填入的位置只余一个的情形;意即找到了 该数在该九宫格中的填入位置。 寻找列摒除解:找到了某数在某列可填入的位置只余一个的情形;意即找到了该数在该列中的填入位置。 寻找行摒除解:找到了某数在某行可填入的位置只余一个的情形;意即找到了该数在该行中的填入位置。 基础摒除法的提升方法是区块摒除法,是直观法中使用频率最高的方法之一. 唯一解法 当某列已填数字的宫格达到8个,那么该列剩余宫格能填的数字就只剩下那个还没出现过的数字了。成为列唯一解. 当某九宫格已填数字的宫格达到8个,那么该九宫格剩余宫格能填的数字就只剩下那个还没出现过的数字了。成为九宫格唯一解. 唯余解法 唯余解法就是某宫格可以添入的数已经排除了8个,那么这个宫格的数字就只能添入那个没有出现的数字. 区块摒除法 区块摒除法是基础摒除法的提升方法,是直观法中使用频率最高的方法之一. 余数测试法 所谓余数测试法就是在某行或列,九宫格所填数字比较多,剩余2个或3个时,在剩余宫格添入值进行测试的解题方法. 隐性唯一候选数法 当某个数字在某一列各宫格的候选数中只出现一次时,那么这个数字就是这一列的唯一候选数了.这个宫格的值就可以确定为该数字. 这是因为,按照数独游戏的规则要求每一列都应该包含数字1~9,而其它宫格的候选数都不含有该数,则该数不可能出现在其它的宫格,那么就只能出现在这个宫格了. 对于唯一候选数出现行,九宫格的情况,处理方法完全相同。 三链数删减法 找出某一列、某一行或某一个九宫格中的某三个宫格候选数中,相异的数字不超过3个的情形, 进而将这3个数字自其它宫格的候选数中删减掉的方法就叫做三链数删减法。 隐性三链数删减法 在某行,存在三个数字出现在相同的宫格内,在本行的其它宫格均不包含这三个数字,我们称这个数对是隐形三链数.那么这三个宫格的候选数中的其它数字都可以排除. 当隐形三链数出现在列,九宫格,处理方法是完全相同的. ------------------------------------------ 修改为:在某行,存在三个候选数字分别出现在三个宫格内, 在本行的其它宫格均不包含这三个数字,我们称这个数对是隐形三链数.那么这三个宫格的其它候选数都可以排除. 当隐形三链数出现在列,九宫格,处理方法是完全相同的 或者: 利用“找出某3个数字仅出现在某行、某列或某一个九宫格的某三个宫格候选数中的情形,进而将这三个宫格的候选数删减成该3个数字”的方法就叫做隐性三链数删减法(Hidden Triples)。 矩形顶点删减法 矩形顶点删减法和直观法讲到的矩形摒除法分析方法是一样的。矩形顶点删减法在识别时比较不容易找到,所以最好先使用其它的方法。 三链列删减法 三链列删减法是矩形顶点删减法的扩展,如果不清楚矩形顶点删减法,可以参考矩形顶点删减法,以便于更容易理解本节内容。 利用“找出某个数字在某三列仅出现在相同三行的情形,进而将该数字自这三行其他宫格候选数中删减掉”; 或“找出某个数字在某三行仅出现在相同三列的情形,进而将该数字自这三列其他宫格候选数中删减掉”的方法 就叫做三链列删减法。 关键数删减法 在进入到解题后期,利用前面讲到的唯一候选数法、隐性唯一候选数法、 区块删减法、数对删减法、隐性数对删减法、 三链数删减法、隐性三链数删减法、矩形顶点删减法、 三链列删减法都无法有进展的时候,可以考虑使用关键数删减法。关键数删减法就是在后期找到一个数,这个数在行(或列,九宫格)仅出现两次的数字。我们假定这个数在其中一个宫格类,继续求解,如果发生错误,则确定我们的假设错误。如果继续求解仍然出现困难,不妨假设这个数在另外一个宫格,看能不能得到错误。这就是关键数删减法. 编辑本段排除法 当某一列,某一行或某一宫里已填7个数字时,可采用排除法,排除不可能出现在这个格子的数,从而确定格子里应该填什么数。比如某一行已填1,3,4,5,7,8,9,还剩2,6,而其中一个空格所在的列上已有了2,可知这个空格里不可能是2,那么另外一个空格里一定是2,那么这个空格里一定是6。 当某一列,某一行或某一宫里已填6个数字时,也可采用排除法。
⑥ 数独解题的方法
原创回答:
建议你去OUBK网学习,那里有全面的数独技巧教学,每种技巧一片文章,文章不长,有一个小时就能看完,还有动态图的示例~
网站里还有大量的数独题目和解答过程~
数独解法一般分两类~一类是直观法,一类是候选法~
直观法(Direct Elimination Techniques)中,常用的算法包括:
单元唯一法 ( Sole Position Technique )
单元排除法 ( Basic Elimination Technique )
区块排除法 ( Block Elimination Technique )
唯一余数法 ( Sole Number Technique )
组合排除法 ( Combination Elimination Technique)
矩形排除法 ( Rectangle Elimination Technique)
在候选法中,常用的算法包括:
显式唯一法 (Naked Single)
隐式唯一法 (Hidden Single)
区块删减法 (Intersection Removal)
显式数对法 (Naked Pair)
显式三数集法 (Naked Triplet)
显式四数集法 (Naked Quad)
隐式数对法 (Hidden Pair)
隐式三数集法 (Hidden Triplet)
隐式四数集法 (Hidden Quad)
矩形对角线法 (X-wing)
XY形态匹配法(XY-wing)
XYZ形态匹配法(XYZ-wing)
三链数删减法 (Swordfish)
WXYZ形态匹配法(WXYZ-wing)
⑦ 数独高级解法有哪些
具体如下:
1、联除法:在两行三个隔膜中查找相同的数字,然后用它们查找另一行中的位数。该方法适用于中、高级数独。
2、巡格法:找出每个横膈膜数字的频率,找出它的位置。
3、排它法:这种方法是解决问题的关键,容易被普通老百姓所忽视。观察队列或横膈膜,如果有一个位置不能被其他数字填补,填补剩下的数字。
4、待定法:这种方法不常使用,但很有效。在区域中临时定位一个数字,并将其用于排除。
5、行列法:该方法用于提高破阶求解问题的效率。
6、假设法:作为专家,我并不主张这种做法。
7 、频率法:这种方法比以前的方法更有效。列出行中或框中的所有情况,然后选择一个高频率的数字。
8、用候选方法解决数独问题的候选算法首先,必须建立一个候选列表。在不同的条件下,每个宫格不可能的候选人可以逐步和安全地被清除。
候选数方法可以用来解决复杂的数独问题,但是候选数方法的使用不像直觉方法那样直接,需要建立候选人名单的准备过程,所以实际使用可以先用可视化方法解决问题,而不能用候选人的方法来解决问题。
候选人数方法的解决方法是逐步排除不合适候选数的过程,所以在删除候选数时一定要小心,要确定删除的候选人是否安全,否则,多次都要重做的问题。在电脑软件的帮助下,使得候选数表的维护变得轻松起来。
常规解题手法:
依解题填制的过程可区分为直观法与候选数法。
直观法就是不做任何记号,直接从数独的盘势观察线索,推论答案的方法。
候选数法就是删减等位群格位已出现的数字,将剩余可填数字填入空格做为解题线索的参考,可填数字称为候选数(Candidates,或称备选数)。
直观法和候选数法只是填制时候是否有注记的区别,依照个人习惯而定,并非鉴定题目难度或技巧难度的标准,无论是难题或是简单题都可上述方法填制,一般程序解题以候选数法较多。
⑧ 数独万能解法数独口诀是什么
九宫格数独口诀是戴九履一,左三右七,二四有肩,八六为足,五居中央。还有口诀:“一居上行正中央,依次斜填切莫忘;上出框时向下放,右出框时向左放;排重便在下格填,右上排重一个样。” 这口诀不仅适用于九宫,也适用于推广的奇数九宫,如五五图,七七图等。
余数法:用格位去找唯一可填数字,称为余数法,格位唯一可填数字称为唯余解 。余数法是删减等位群格位(Peer)已出现的数字的方法,每一格位的等位群格位有 20 个。
直观法:直观法就是不做任何记号,直接从数独的盘势观察线索,推论答案的方法。
摒除法:用数字去找单元内唯一可填空格,称为摒除法,数字可填唯一空格称为摒余解 。数字可填唯一空格在“宫”单元称为宫摒余解,这种解法称宫摒除法。
如果这些数字的每一个区域、每一行、每一列都是1到9之间的数字,那么玩家需要使用一些排除、链删除等算法来填充整个9*9的地图,那么在游戏开始的时候,会有一些数字,而且这些数字是不能移动和删除的哦,这是游戏的难度等级,如果难度越大就意味着有更多的固定数字。
⑨ 数独算法
给你数独计算器:
http://blog.xunlei.com/web/category.html?uin=mianmiany1978&category_id=143
数独游戏:
http://blog.xunlei.com/web/category.html?uin=mianmiany1978&category_id=174
数独算法:
http://www.puzzle8.com/suku/news.asp
数独快速入门(上篇)
数独快速入门(中篇)
数独快速入门(下篇)
唯一解法
唯一候选数法
隐性三链数删减法
隐性数对删减法
三链列删减法
区块删减法
矩形顶点删减法
关键数删减法
补充:
合格的数独是只有唯一解。
而数独有难易度的分类,找一份报纸注意刊登的数独谜题是1星,还是5星。
在网络上,更分成容易题、进阶题、难题、极难题、超难题....
一般都是依据需要运用的技巧,而技巧是区分难易的。
数独不用猜测,解题全部是运用逻辑推理。
数独不用电脑程序分析,就可以解的题目是直观法数独题。
而超难题是需要电脑分析,及把全盘标示可选数,那是可选数谜题。
没有所谓解题通则。
1.直观解(一般报纸、书籍)
直观法技巧
直观法技巧 01 (容易级) 唯一解
直观法技巧 02 (容易级) 基本摒除
直观法技巧 03 (进阶级) 宫对行列摒除
直观法技巧 04 (进阶级) 行列对宫摒除
直观法技巧 05 (进阶级) 群组解法
直观法技巧 06 (困难级) X-Wing摒除法01
直观法技巧 06 (困难级) X-Wing摒除法02
直观法技巧 07 (困难级) 数偶摒除法
http://hi..com/kiwy07/blog/item/181fc482a153f3bd6c8119ab.html
2.可选数(以程序自动生成可选数)
Last value in block, row or column
Hidden Single in block
Hidden Single in row or column
Direct Pointing
Direct Claiming
Direct Hidden Pair
Naked Single
Direct Hidden Triplet
Pointing
Claiming
Naked Pair, X-Wing, Hidden Pair
Naked Triplet, Swordfish, Hidden Triplet
XY-Wing, XYZ-Wing
Unique rectangles and loops
Naked Quad, Jellyfish, Hidden Quad
Bivalue Universal Graves
Aligned Pair Exclusion
Bidirectioal X-Cycles and Y-Cycles
Forcing X-Chains
Forcing Chains, Bidirectional Cycles
Nishio
Cell/Region Forcing Chains
Dynamic Forcing Chains
http://diuf.unifr.ch/people/juillera/Sudoku/FAQ.html
通则无法解的题
直观难题
006589307
030602008
809703500
000891403
394265871
180374000
003026785
000458030
008037200
可选数极难题
970000000
003927000
008410709
300700400
060050070
007040003
105074900
000068507
786000042
不要把谜题解一次列出,而是找出下一步,及他的逻辑推理方法。
不要用猜测。
⑩ 什么是SA算法
又叫模拟退火算法