求解使用状态压缩+回溯。
状态压缩
- 使用 bitset<9> 来压缩存储每一行、每一列、每一个 3x3 宫格中 1-9 是否出现
- 这样每一个格子就可以计算出所有不能填的数字,然后得到所有能填的数字 getPossibleStatus()
- 填入数字和回溯时,只需要更新存储信息
- 每个格子在使用时,会根据存储信息重新计算能填的数字
回溯
- 每次都使用 getNext() 选择能填的数字最少的格子开始填,这样填错的概率最小,回溯次数也会变少
- 使用 fillNum() 在填入和回溯时负责更新存储信息
- 一旦全部填写成功,一路返回 true ,结束递归



原贴
易语言数独,当前论坛最完美的数独哦!!(为作业No.94的源码)
https://bbs.125.la/forum.php?mod=viewthread&tid=14191541
点我下载
(已有 34 次下载)