泽拉の避风港

末世纪元第200年

0%

递归入门:回溯法求数独的解

上水课,觉得太无聊便突发奇想找几个数独玩一玩,无奈脑子不够用,两三个数独就能让我汗流浃背(不是),回想起高中那会儿还研究过回溯法解数独,那个时候的思维不够具象化回溯法的递归原理,所以很轻易就放弃了

到了大学,有时间也有思维去研究相关原理了,正好现在文章两三个月没更新了,所以在这里水一篇。

数独规则

对于数独的规则,大家或多或少都有了解,我在下面用自己的语言描述一下。

若有 \([9\times9]\) 的由数字构成的方阵,且该方阵要求每一行、列、宫(即 \([3\times3]\) 的方阵)所包含的数字都不重复,而数独即在完整的该方阵中取出一定数量的数字形成的难题。

严格意义上来说,数独有且只有一组解,不唯一解的数独是有问题的。

回溯法

回溯法解数独是一种递归穷举的方法,但它为什么要叫这样一个名字?这一定和它的作用原理有关,顾名思义,面对某个连贯的代数问题 \(Q\) ,其有 \(m\) 级,而每一级有 \(n\) 种输入值,且输入值有判定合法的规则,如果其只包含一组解 \(a_m(n)\) ,若任意一个某级输入值 \(a_p(q)\in a_n\) 都不满足该级的判定规则时,就回溯到 \(a_{p-1}\) 级,再次寻找符合规则的临时解。

如果将整个问题 \(Q\) 比作一棵树,那么回溯法就是尽可能地找到整棵树中最深的地方,在那里得到问题的解。