ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 724|回复: 22

[分享] 优化数独求解

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-23 17:36 | 显示全部楼层 |阅读模式
数独递归求解优化了一下,忍不住和大家分享下。

网上号称最难数独题0.3秒可解。
image.png

朋友们有难的数独题可以测试一下。
数独求解.zip (29.82 KB, 下载次数: 40)

TA的精华主题

TA的得分主题

发表于 2024-8-23 18:55 来自手机 | 显示全部楼层
留个记号

TA的精华主题

TA的得分主题

发表于 2024-8-24 20:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-24 23:23 | 显示全部楼层
分享一下算法思路?用的什么算法

TA的精华主题

TA的得分主题

发表于 2024-8-25 10:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
模拟人工解题,代码可以实现纵横格相互限制的唯一性判断,用坐标位置举例:(1,1)点是5,(2,4)点也是5,那么(3,7)(3,8)(3,9)必然有一个5,并且(1,789)(2,789)直接排除5,这种模式。然后代码每次判断都根据优先级判断做唯一值判断和排除。

这样不用递归去判断再回溯,每一步都判断出一个结果,直到全部结果。这种思路是否可行,会不会比回溯更快?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-25 10:10 | 显示全部楼层
micch 发表于 2024-8-24 23:23
分享一下算法思路?用的什么算法

还是用递归,以前发的https://club.excelhome.net/thread-1092452-5-1.html
遍历数组,每个空格从1-9试填,9个数字都不能填则回溯。

本次优化主要是使用attack数组判断数字能否使用。
attack(1-9,1-9,1-9)一维二维对应的是源数组坐标,第三维表示数字1-9,
数组的值为TRUE,表示该数字使用过了,不能填,反之可用。
参考了八皇后问题的解法。

以前的解法使用字典
同一题目,优化后可在1秒内,字典需要7秒左右。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-25 10:37 | 显示全部楼层
其实我觉得解数独不算难,出数独题目才是难题。
因为数独要求唯一解,这是难点所在。

目前我的思路是随机生成一个数组(填满数字1-9,符合数独规则)
然后随机挖空。
每挖一个,就判断一次是否有唯一解。
方法有点笨,相当于解了N次数独题
兄弟们有没有更好的方法?

挖50个以上就有点慢了,
55个很慢,60个以上基本不可能。

注意,最多只能挖64个,因为最少要保留17个数字,
才能有唯一解。

TA的精华主题

TA的得分主题

发表于 2024-8-25 10:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png 算来算去就一种结果?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-25 10:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
micch 发表于 2024-8-25 10:03
模拟人工解题,代码可以实现纵横格相互限制的唯一性判断,用坐标位置举例:(1,1)点是5,(2,4)点也是5, ...

我认为回溯是不可避免的。
因为难的数独题,都不能根据规则直接得出唯一数字。
可填数字有多个就要试,试错了就要回溯。
有差别的是,要试的数字多少而已。

另外,模拟人工高阶解法是很难的,反正我觉得挺难。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-25 10:52 | 显示全部楼层
zxsea_7426 发表于 2024-8-25 10:49
算来算去就一种结果?

你这只有一个数字也不是数独啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 17:36 , Processed in 0.035053 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表