宫排除法是标准数独中最常用的算法,即通过宫以外的行(或列)中已经出现的数字对这个宫的若干空格进行排除,当最终在宫中只剩下唯一空格没有被某个数字排除时,这个唯一空格中的值就是该数字。
一个数字出现的次数越多,这个数字对没有出现该数字的宫的排除效果就越好,得出唯一解的概率也越大。
我们试一下应用宫排除法,在如图1所示的例题中找出数字8的全部位置。
第一宫、第二宫、第六宫、第八宫、第九宫中,数字8已经作为提示数出现,只需要找出第三宫、第四宫、第五宫、第七宫中数字8的位置。
第1步:如图2,应用宫排除法,第三宫的R2C7=8。
第2步:如图2,应用宫排除法,第七宫的R9C1=8。
第3步:如图3,应用宫排除法,第四宫的R6C2=8。
第4步:如图4,应用宫排除法,第五宫的R4C5=8。
如果一个数字在某一行(列)中没有出现,但是该行(列)穿过的宫中出现了该数字,这种情况下多应用行(列)排除法。
实际的解题过程中,行(列)排除法的应用条件比宫排除法更难被发现,需要细心地观察。
应用行(列)排除法时,要尽量选择空格较少的行(列)进行观察,尽量选择出现次数较多的数字进行排除,然后再观察该行中空格所在的列(行)以及该行(列)穿过的宫。
我们试一下,应用行排除法,在如图5所示的例题中找出第四行中数字7的位置。
因为第六宫中R6C8=7,所以R4C(7,8,9)≠7;
因为第一列中R8C1=7,所以R4C1≠7;
因为第三列中R2C3=7,所以R4C3≠7;
因为第四列中R1C4=7,所以R4C4≠7。
综合以上情况,应用行排除法,第四行中R4C6=7。
再试一下应用列排除法,在如图6所示的例题中找出第一列中数字1的位置。
因为第三行中R3C4=1,所以R3C1≠1;
因为第四行中R4C7=1,所以R4C1≠1;
因为第五行中R5C5=1,所以R5C1≠1;
因为第七行中R7C8=1,所以R7C1≠1。
综合以上情况,应用列排除法,第一列中R9C1=1。
下面试着挑战一下后面的习题吧!