解题思路
在看到这个题目后我首先去百度了一下数独的具体含义:
数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。
数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。
——百度百科
我的第一个想法是这样的:
运用回溯法,9乘9的大方格可以分为9个3乘3的小方格,在每个方格中随机的写入2到3个数,同时不违背数独的规则,之后从第一个空格开始,按照从左至右,从上至下的原则进行回溯,每次回溯所选取的值是在当前情况下,满足数独游戏规则所能选取的值中的一个,如果发现当前空格内没有可选取的值,则证明至少上一步的选择是错误的,回溯到上次选择重新进行选取。这可能是逻辑上最简单的算法之一,但考虑到后续有对程序性能的考察,那么这种暴力回溯算法就放弃了。但是求解数独时还是采用的这种方法。
暴力回溯不可取,于是自然而然的想到了按照某一种数学规则进行数独的生成。请教了一位同学,将9个数字分为3组,比如147,258,369,之后在每个3乘3的方格中,将这9个数字分成3次填入,每次直接填1组的三个数字。
以上就是我的第一次大概思路。:)