如果数独谜题具有独特的解决方案,那么它是最小的(也称为不可约),但是删除任何数字将产生具有多种解决方案的谜题。换句话说,每个数字都是确定解决方案所必需的。
我有一个基本算法来生成最小的数独:
这种方法可以保证产生最小的困惑,但它相当慢(在我的计算机上为100毫秒,在智能手机上为数秒)。我想减少求解的次数,但是我能想到的所有显而易见的方法都是不正确的。例如:
我还想优化求解算法本身。困难的部分是确定解决方案是否唯一。我可以进行微优化,例如为每个单元格创建合法放置的位掩码,如本精彩文章所述。但是,更先进的算法(如“跳舞链接”或模拟退火)并非旨在确定唯一性,而只是为了找到 任何 解决方案。
如何优化我的最小数独生成器?
这是我实现的(高度近似)速度提高百分比的主要优化: