数独易语言源码
求解使用状态压缩+回溯。
状态压缩
使用 bitset<9> 来压缩存储每一行、每一列、每一个 3×3 宫格中 1-9 是否出现
这样每一个格子就可以计算出所有不能填的数字,然后得到所有能填的数字 getPossibleStatus()
填入数字和回溯时,只需要更新存储信息
每个格子在使用时,会根据存储信息重新计算能填的数字

回溯
每次都使用 getNext() 选择能填的数字最少的格子开始填,这样填错的概率最小,回溯次数也会变少
使用 fillNum() 在填入和回溯时负责更新存储信息
一旦全部填写成功,一路返回 true ,结束递归

发表回复

后才能评论