数独题目如何自己出?
因为有朋友想学习如何自己出一道数独题目,今天我们就来介绍一下这个。
Part 1 手动出题
手动出题分两种:空盘填数和终盘抠数。它们是两种完全相反的出题操作。一种是从空盘开始,上手试填一些位置,然后边试边解,直到题目唯一解的过程;另外一种则是找一个终盘,然后去掉一些数字,边抠边解题,使得题目唯一解的过程。
1-1 空盘填数
我们试着来看看如何空盘填数出一道唯一解的题目。首先,我们要找一个数字摆放的基本模型。比如下面这样:

接着,我们需要在蓝色格子里填上合适的数字来保证题目的唯一性。这个形状是你任意指定的,但有一些基本原则需要你注意。
不能空上三个连续的宫不放蓝色格子;
不能空出多于 5 个宫不放蓝色格子;
不能在并排的三个宫里,空上两行(或两列)不放蓝色格子;
建议蓝色格子至少 18 个(但请尽量保证蓝色格子至少 24 个);
建议蓝色格子摆放不要太密集(否则题目可能会过于简单);
中间红色格子的边框请你忽略掉。整个出题的过程都跟这个红色边框没有任何的关系。
另外,任何一个唯一解的数独题目,最少也有 17 个提示数,但是,17 提示数的题目我们目前没有任何办法可以自己出题搞出来,而基本都是电脑通过排列组合的形式生成的,因此我们无法手动完成“只用 17 个蓝色格子就可以出一个唯一解的题目”这一个问题。数独出题也是 NP-Hard 问题。换句话说,我们没有能力通过人工进行证明和得到出题的通用效率高的过程:因为时间耗费不是我们人类能够承担得起的。
我相信你应该看得懂上面给的这些条条款款,所以我就不作说明了。说白了就是不要让空白(没有标记蓝色的格子)集中到一起,否则就不能保证唯一性。另外,上面选择的这个形状比较合适,是因为这样的形状,蓝色格子比较分散,尽量都保证了每个行、列、宫都有蓝色格子放提示数,这样就限制得很严格了。
接着,我们试着随意在蓝色格子里填上我们喜欢的数字。但请注意,填数的时候,一边填一边看数字是否对周围会产生影响。比如说,我连续填入了多个 1,但是这些填入的 1 会立刻影响到某个行、列、宫,导致这个(或者这些)行、列、宫里无法找到合适的位置填入 1。这个时候我们就需要修改数字了。一定要保证数字填入的时候是合理的。

我们试着随意填入了 9 个不重样的数字。显然,这么做是可以的,因为不重样的数字就不会影响到别的数字的填数位置。
接着,其它蓝色格子我们还没有填数,我们还得继续填。继续找合适的数字去填;当然,也不要过于在意填数必须是连续的序列啊、有意义的序列这类要求较高的条件。因为这样做很有可能会导致题目无法进行,或者无法保证唯一性。

比如这样,连续的 1、2、3、4 很有可能就无法保证题目唯一性了。因此,我们随便填一些数字进去就可以。填入了这么多数字后,我们需要手动完成解题操作。因为蓝色格子还没有全部摆放数字,因此我们现在要通过尚未完成的残局开始做题。能做多少是多少,这里是为了看是不是有蓝色的数字是可以通过解题固定下来的。换句话说,我们已经有的这些数字很有可能会让一些没填数的蓝色格子固定下唯一的填法。在这个基础上,如果想要为这个位置的蓝色格子填上别的数字的话,显然就无解了。
但是,如果数字还不够出现这类现象(也不会造成别的格子无解)的话,我们就继续往蓝色格子里填数,直到一些位置可解了位置。

现在我们假设左下方填入 7、1、7、1。这些数字是随意给的,你可以给别的数字。可以看到,这样填的话,7 宫的 1 就明显可以直接通过排除法固定下来了。因此,我们就按照这个形式去找填数结果。
如果你并不是为了出难题,那么排除和唯一余数在出题过程中就基本够用了。如果你发现目前排除和唯一余数无法进行解题操作,那么就说明题目数字还不够。这个时候你还得加数字。
最终,我们找到了一个合适的组合:

如图所示,这个题目是唯一解的。把蓝色数字抽取出来,就是题目了。
1-2 终盘抠数
说实话,终盘抠数比前文做起来要简单。但是,由于终盘固定,因此我们无法自定义一些复杂的条件在里面,比如“一些位置是连续摆放的提示数,数字也是连续的”这些条件,只能看终盘本身的造化了。如果终盘不存在这样的形式的话,那么我们无法通过终盘抠数字的模式去出这样的题目。
我们随便找一个题目的终盘来作为基础盘面生成:

下面我们从盘面里抠一些数字来完成出题。你要抠成什么形状都随你定,但是还是前面的那些条条款款,不要抠到题目没办法唯一解了。
注意,抠掉的位置都是空格,没抠掉的位置全是提示数。因此你得多抠点数字下来。不然题目会过于简单。

继续抠。

还不够少。继续。

继续。

实在无法继续进行了。题目就这样了。一共 28 个提示数,不管数字多少,总之题目不难就是了。
Part 2 自动出题
下面说一下使用电脑软件进行自动出题。因为手机 App 我了解得不多,因此我就不在这里班门弄斧了。说一下电脑的软件。
HoDoKu,是荷兰的程序员开发的一个程序,可以提供题目分析、出题等功能。我们用的是出题功能。

点这个就完事了。然后就会列出题目,题目用到的技巧等等信息。

呃……这个又过于简单了。但是电脑出题并不能设置各种条件。HoDoKu只能生成中心对称摆放的提示数的题目,且是随机出的,因此题目本身你无法控制数字的摆放条件。