关于数独求解的分析

我的基本的思路是,按照约束条件,每个空格应当分别在横向,纵向和方格内产生三个可选解的集合,这三个可选解求交集,既是该空格最终的可选解,有如下几种情况:

1、如果该解是唯一的,则将该解填入该位置,重新检索数独集合(重新检索可以有其它的思路,这种思路编码上更简单)

2、如果该解不是唯一的,将该解保存入一个解向量组(该解向量应当对所有解根据个数进行从少到多进行排序)

3、所有空格检索完毕后,从解向量中找出第一个解向量组(应该是最少的一个,或之一),从中任选一个作为解,重新检索数组,如果不对,再使用其它可选解进行尝试(这种方式有点类似树,逐渐剪枝的过程)

这种方式应当有如下方法和数据空间

1、从数独中按照顺序查找空白点

2、对给定位置查找横向可选解

3、对给定位置查找纵向可选解

4、对给定位置查找方块内可选解

5、对所有可选解求交集,得到最终可选解

-- 这里有一个合适的数据结构存储所有可选解(前面提到的向量是一种可选的方案)

----这个数据结构可以对所有可选解进行排序

----如果可能,这个数据结构能够将对指定解后,所有相关的可选解进行剪枝(这样能够避免重新搜索)

----最简单的方式就是每个解向量组包含一组坐标,该坐标标定该解在数独中的位置,通过该位置,可定位受影响的行,列,和方块,从受影响的元素内删掉相关的数置即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值