一.项目介绍及地址

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

二.PSP时间估计

PSP2.1 Personal 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层图
    【个人项目】数独终局
  • 1层图
    【个人项目】数独终局

2.编码实现

(1)生成数独模块设计实现

(2)求解数独模块设计实现

(3)GUI界面设计实现

3.测试

五.程序改进

1.代码质量分析

2.性能分析

六.代码说明

1.生成数独

2.求解数独

3.GUI

七.时间统计

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

八.个人总结


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

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

相关文章:

  • 2021-06-21
  • 2021-12-19
  • 2021-09-17
  • 2022-01-17
  • 2021-12-09
  • 2021-11-29
  • 2021-05-30
  • 2021-08-16
猜你喜欢
  • 2021-09-19
  • 2021-07-25
  • 2021-05-17
  • 2022-01-13
  • 2021-06-03
相关资源
相似解决方案