【第一篇】数独终局

一.项目介绍及地址

GitHub:Sylph3/SoftwareEngineering
实现一个能够生成数独终局并且能求解数独问题的控制台程序。

二.PSP时间估计

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划90
Estimate估计任务需要多少时间20
Development开发2500
Analysis需求分析(新技术)400
Design Spec生成设计文档60
Design Review设计复审30
Coding Standard代码规范10
Design具体设计300
Coding具体编码1200
Coding Review代码复审200
Test测试300
Reporting报告410
Test Report测试报告330
Size Measurement计算工作量20
Postmortem&Process Improvement Plan事后总结,提出改进60
总计3000

三.解题思路

1.生成数独

通过参考资料1,我了解到:每个数独终局,从第二行开始,每行分别是第一行右移3、6、1、4、7、2、5、8列的结果。规定左上角的格子中的数必为(学号后两位相加)%9+1,以我的情况为8,因此存在8!种终局;同时,每三行、每三列可以任意互换,因此4-6行/列,7-9行/列可进一步互换,共存在8!×3!×3!种终局。

2.求解数独

关于数独的求解,根据以往的经验,很容易就能想到用回溯法进行求解,即根据空结点的顺序遍历寻找数独的解。大致策略为:枚举尝试当前空格可以填入的数字,标记,进行下一空格的尝试,若该空格不可填入任何数字,说明之前的操作有误,回溯到上一级操作。重复该过程,直到没有空格,函数终止,找到相应解。考虑到这一算法可能较为耗时,可采取针对小九宫格等方式进行优化。
还有另一种方法是DLX算法2,即将数独问题转化为NP完全的精确覆盖问题,该算法在时间上取得了极大的优化。

四.设计实现

1.需求分析

(1)功能分析

程序要求的两项功能相互独立,因此,可以将该程序大致划分为以下几个模块:

  • 命令行判断:命令行判断命令类型是生成数独还是求解数独,处理格式正确的参数,传参给相应模块;同时处理异常。
  • 生成数独:在控制台输入指令“sudoku.exe -c n”,生成n个数独终局并按格式写入sudoku.txt文件。
  • 求解数独:在控制台输入指令“sudoku.exe -s path”,求解文件路径path下文件中的数独题目,并将结果输出到sudoku.txt文件。

(2)功能建模

采用数据流图进行功能建模如下:

  • 0层图
    0层图
  • 1层图
    1层图

  1. https://www.cnblogs.com/BIT1120161931/p/8618878.html
    ↩︎

  2. http://blog.gssxgss.me/use-dlx-to-solve-sudoku-1/ ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值