ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 递归学习之--数独解法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-17 14:53 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:递归
无聊之际,用类模块、栈、递归、回溯,写一个数独
  1. '***************************************************************
  2. '                  VBA 数独类模块
  3. '                   (clsSukodu)
  4. '             Ver:1.0        Author:lsdongjh
  5. '***************************************************************
  6. '提供使用的过程和函数
  7. '
  8. '根据难度系数intDifficulty,创建不同的数独题目
  9. '1) CreateSukodu(Optional intDifficulty As Integer = 0)

  10. '自动解答,前题是 需要有题目,题目可以自动生成,也可以根据格式导入
  11. '2) AutoAnSwer() As Boolean

  12. '导入题目,支持三种类型:二维数组、一维数组、字符串
  13. '3) InitSukoduByValue(varValue As Variant, affType As afferentType) As Boolean

  14. '导出题目,支持三种类型:二维数组、一维数组、字符串
  15. '4) OutPutValue(OutType As afferentType) As Variant

  16. '根据行列号,返回 当前格子可用的 数字,为一维数组形式
  17. '5) GetNums(RowID As Integer, ColID As Integer) As Integer()

  18. '在指定行列号的某个位置填入某个数字
  19. '6) PutNum(RowID As Integer, ColID As Integer, intValue As Integer) As Boolean

  20. '删除指定行列号的某个位置上的某个数字
  21. '7) DelNum(RowID As Integer, ColID As Integer, intValue As Integer) As Boolean

  22. '判断题目是否创建成功
  23. '8) HasCreate() As Boolean

  24. '获取当前某个行列号上的数字
  25. '9)Nums(RowID, ColID) As Integer

  26. '判断题目是否完成
  27. '10)Finsh() As Boolean
复制代码


只是把工作表当做显示界面,所有核心逻辑均在类模块中解决

给大家参考吧: sudoku.rar (82.22 KB, 下载次数: 244)

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-2-17 16:18 | 显示全部楼层
你的算法解题时间太长了,我的算法不用1秒就能解出来的数独你的要解好久
001.gif
002.gif

TA的精华主题

TA的得分主题

发表于 2020-2-17 16:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
huanghai22 发表于 2020-2-17 16:18
你的算法解题时间太长了,我的算法不用1秒就能解出来的数独你的要解好久

算法没有绝对的,只是贴主用的是递归,他的关键词是“递归”,不是“算法效率”

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-17 16:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
huanghai22 发表于 2020-2-17 16:18
你的算法解题时间太长了,我的算法不用1秒就能解出来的数独你的要解好久

算法没做优化,重点是 类化、模块化,仿栈操作

TA的精华主题

TA的得分主题

发表于 2020-2-17 16:41 | 显示全部楼层
microyip 发表于 2020-2-17 16:36
算法没有绝对的,只是贴主用的是递归,他的关键词是“递归”,不是“算法效率”

递归等于循环遍历,递归剪枝才是种算法。

TA的精华主题

TA的得分主题

发表于 2020-2-17 16:45 | 显示全部楼层
zopey 发表于 2020-2-17 16:41
递归等于循环遍历,递归剪枝才是种算法。

这个只是贴主在技术处理上的不娴熟问题,可以改进嘛

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-17 17:01 | 显示全部楼层
如果 优化算法,其实非常简单的,只是暂时没想好如何整合。在所有空位中,优先选择唯一解的,如果没有唯一,按数量升序选择。本次只是尝试模块化,所以没考虑好如何整合。

TA的精华主题

TA的得分主题

发表于 2020-2-17 19:25 | 显示全部楼层
能递归出来就很厉害,之前搜过数独,好像有个帖子里香川老师发过数独的算法代码,可惜论坛搜索不好使找不到了

TA的精华主题

TA的得分主题

发表于 2020-2-17 19:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-2-17 19:45 | 显示全部楼层
查了香川老师的所有主题,好象没有。要么是在回帖中给出的。刘永富老师给出过一个工具,是exe文件。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 07:58 , Processed in 0.045655 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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