数独游戏技巧(转)

引用 数独游戏技巧(图解)

一直都有在玩数独

一般难度的都能完成

可是高难度的就完全没办法了

好多累计玩了几十小时都解不出

刚刚在网上看到这个介绍数独技巧的帖子

真的很实用

不过方法太多

得慢慢消化。。。

引用

地狱大坏蛋 的 数独游戏技巧(图解)

i)唯一数法

:如果我们发现某个格子中只有一个可用候选数,那么这个格子必然是这个数字,这就是唯一数法如下面例子,H5格子中只有唯一候选数3

ii)隐含唯一数法

如果我们发现某一行某一列或某个九宫有一个候选数只出现在一个格子里面,那么这个格子必然是这个数字,这就是隐含唯一数法,如下面例子,第3列候选数4只出现在格子I3中

iii)数对法

如果我们发现某一行某一列或某个九宫有两个格子只使用了两个候选数,那么这两个格子必然正好是这两个数字,那么在这个单元(行,列,或九宫)中,其它格子不会出现这两个候选数,这就是数对法,如下面例子,第一列中B1和G1的候选数都是7,8;那么D1,H1中的候选数7,8可以删除。


iv)三链数法

如果我们发现某一行某一列或某个九宫有三个格子只使用了三个候选数,那么这三个格子必然正好是这三个数字,那么在这个单元(行,列,或九宫)中,其它格子不会出现这三个候选数,这就是三链数法,如下面例子,
最下面中间的九宫中格子H4,H5,I5三个格子都只使用候选数2,8,6;所以G4,G6,I6中出现的8,6都可以删除

v)四链数法

如果我们发现某一行某一列或某个九宫有四个格子只使用了四个候选数,那么这四个格子必然正好是这四个数字,那么在这个单元(行,列,或九宫)中,其它格子不会出现这四个候选数,这就是四链数法;如下面例子中
上面中间的九宫中四个格子A5,B5,C4,C5都只使用了数字1,2,3,4;所以另外4个格子A4,A6,B4,C6中出现的数字1,2,3,4可以删除

vi)隐含数对法

如果我们发现某一行某一列或某个九宫中有两个候选数只出现在两个格子中,那么这两个格子必然正好是这两个数字,那么这两格子中其他候选数可以删除,这就是隐含数对法;如下面例子,第A行中,只有格子A7,A8使用了数字6,8;所以这两个格子中其它数字2,5,9都可以删除


vii)隐含三链数法

如果我们发现某一行某一列或某个九宫中有三个候选数只出现在三个格子中,那么这三个格子必然正好是这三个数字,那么这三格子中其他候选数可以删除,这就是隐含三链数法,如下面例子,第8列中只有格子C8,F8,G8使用了数字1,3,4;所以格子F8中出现的其它数字6,7,8可以删除

viii)隐含四链数法

如果我们发现某一行某一列或某个九宫中有两个候选数只出现在两个格子中,那么这两个格子必然正好是这两个数字,那么这两格子中其他候选数可以删除,这就是隐含四链数法,我们借用四链数中的例子,可以发现上面中间的九宫格中,只有格子A4,A6,B4,C6使用了四个数字5,6,7,9;所以它们使用的其他数字1,2,3,4可以删除。

ix)区域删减法

如果我们发现某一候选数在某一单元(行,列,九宫)中完全处在同另外一个单元的交集中,那么在另外一个单元中,不在交集中的这个候选数必然可以删除,如下面例子,第D行中所有数字5都正好在左边中间的九宫中,所以在这个九宫中,不在第D行的候选数5(E3中)可以删除

x) 矩形法

如果某个候选数在某两行(列)中只出现在某两行(列)中,那么在那两行(列)中,不在那两列(行)的这个候选数都可以删除,如下面例子,第C行和第F行的候选数3都正好是两个而且出现在第1列和第8列;所以第1列和第8列中,不在第C行和第F行的候选数3 (A8,D1,D8,I1,I8)都可以删除

把它扩展到三行或四行就可以得到高阶矩形法(我也看到翻译成3链列,4链列的),同样下面例子中可以删除蓝色的候选数6

xi)唯一矩形法

最新添加唯一矩形法,这个方法利用了数独结果唯一性的特性:如果有四个构成矩形顶点的格子只使用两个数字,而且同在一行或同在一列的格子在同一个宫格中,那么这个局面的结果必然不是唯一的(交换它们使用的数字同样可以得到合法的数独结果),必然不是合法的数独局面。通过这个结论我们分别得到两种删减法:
如下图A3,C3,A9,C9中,C3必然不能取候选数1和9(不然结果必然不唯一),所以C3只能取候选数5.

如下图,D2和F2中必然有一个格子结果是3,不然D2,F2,D9,F9都只能是数字1和9,结果必然不唯一。
由此进一步得出第2列中H2不能取3(同样还可以得出在左中宫格中F3不能取3)

xii)关连数删减法

通过找到一串强关联数据来得出矛盾来删除候选数。
如下图,第9列只有G9和D9有候选数3,它们之间是强关联数据,同样D4和I4之间也是强关联的。
此外D9和D4之间在同一行都使用数据3,它们是弱关联。这样通过一系列强弱关联(弱关联可以用强关联替代),
如果我们可以得到一个矛盾链。如下图,我们可以通过提示中逻辑推理排除G6=3(实际上还可以排除I7=3和I8=3)

下面是一个更加复杂的例子,用到了多个候选数:

时间: 2024-10-08 06:58:14

数独游戏技巧(转)的相关文章

数独游戏程序

mathe的专栏 http://blog.csdn.net/mathe/article/details/1175498 数独游戏程序 分类: 软件2007-08-23 11:02 22389人阅读 评论(26) 收藏 举报 游戏c图形扩展 数独简介:    数独是一个智力小游戏.一个9*9的棋盘,共有9行9列以及9个互不相交的3*3九宫格.里面某些格子开始已经填上了1-9中的一些数字.要求玩家在余下的空格中填上1-9中数字,使得每行,每列和每个3*3九宫格中都正好包含1-9数字各一个.数独游戏保

数独游戏求解程序

最近玩数独游戏,每行.每列.以及9宫格都包含1-9个数组.觉得这东西很适合用程序来求解.于是我就仿照中国象棋的暴力搜索算法(可参考我之前写的文章极大极小搜索算法),写了一个程序求解数独,直接贴代码了 /** * 模仿象棋程序的搜索算法,写一个求解数独的程序 * @author royhoo * */ public class ShuDu { private int[][] board; // 数独矩阵 private int zeroNum; // 缺失的数字个数 private int fil

数独游戏的设计与实现

前景:数独游戏,是一种数学智力拼图游戏,是“独立的数字游戏”的简称,源自18世纪末的瑞士,后在美国发展,在日本得以发扬光大. 数独游戏可以训练玩家的逻辑推理能力,不少教育者皆认为数独是锻炼脑筋的好方法. 然而如何制作出这个游戏?首先要了解它的规则: 1.游戏会从一个部分带有数字的九宫格开始. 在9×9的大九宫格(即3格宽×3格高)方阵里,每一格又细分为一个小九宫格. 2.游戏开始,已给定若干数字,其它宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字. 3.填数字时必须满足以下条件:在空

5乘5的数独游戏

用了三个周的业余时间,日思夜想的牵挂才把5乘5的数独游戏填满了二十五个宫格. 在这前一篇<数独游戏新篇章>里面,通过对第一个宫格使用位移变换来得到后面的二十四个宫格,总觉得没有什么意思.现在可以通过回溯的办法填满整个二十五个宫格,又觉得这样的结果好像120个点的连通图里面的哈密顿回路的条数那样多得不可思议,所以就想在一个已经填入了一部分数字的情况下,再把其余的格子填满,因为已经有了可以解决3乘3标准数独的基础(前一篇那一个是芬兰数学家给出的世界最难标准数独,编写的程序运行十小时就能得到结果,就

android数独游戏

最近没事干,照着视频教程写了一个数独游戏,很粗糙还有很多要修改的地方.下面就来说说这个游戏吧 1.自定义一个View控件,用来在屏幕上显示一个9*9的格子,其实就是横着画8条线,竖着画8跳线,然后将其中的几条线加粗一下.这样就形成了9*9的格子了 2.用一个字符串初始化游戏界面上的数字 1 String str_int = "360000000004230800000004200"+ 2 "070460003820000014500013020"+ 3 "

C语言学习 数独游戏

摘要:花了1周多时间学习了C语言,开始练手写解数独游戏的程序. 作者:乌龙哈里 时间:2015-11-22 平台:Window7 64bit,TCC 0.9.26(x86-64 Win64) 参考: 互动百科 数独 章节: 正文: 原来也用C#和Go语言写过,主要思路是暴力撞大运破解.思路什么的在程序了都注释了,不多说了.可能是没用什么先进的算法,感觉C解题速度和C#差不多(除了C#第一次运行之外),基本上出来一个数独表都不用1秒. 附完整程序: 1 /*********************

数独游戏算法

# #author:wuhao # #解数独游戏 # #想法:从(0,0)开始往下遍历,(当然从什么位置开始遍历是无所谓的,只是代码写法可能要有点变化,我是从(0,0)开始往下逐层遍历),首先判断其是否需要填值check(a,i,j),如果需要填值就填上其可能的值保存在FillData(a,i,j),返回的是一个list存放的是其可能的值,最后进行遍历查找正确的结果 check函数: def check(a,i,j): if a[i][j]==0: return True return Fals

数独游戏代码

//数独游戏c++ class CSudoku { int map[9][9]; int blanks; int smod; int solves; int check(int,int,int*); void dfs(); public: enum{ANY=0,ALL=1}; CSudoku(int); CSudoku::CSudoku(int *data); void SudokuGenerator(int); //随机生成数独,n越大越难 void SudokuGenerator(int *

【QT学习】数独游戏

前几天刷leetcode刷到一题,讲sudokuSolver,写完感觉很有意思,遂想做一个数独游戏,百度了一下如何自动生成题库,参考某位大神安卓下的实现思路,自己做了一套文字版的数独游戏,后来想乘机会学一下QT于是完成了图形界面的数独.先mark一下之后从数独解题,数独出题,QT图形界面来讲讲自己的心得体会. 界面写完是这样的.也算有点小成就感了. 游戏链接+QT运行动态库 http://pan.baidu.com/s/1kTu5alh