软件工程个人项目
项目仓库地址:
链接:https://github.com/catandrain/MySudoku
任务:
生成一个能够生成数独终局并能求解数独问题的控制台程序。
预计使用时间:
PSP2.1 | Personal SoftWare Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planing | 计划 | 60 | 30 |
Estimate | 估计任务耗时 | 3600 | |
Development | 开发 | 1800 | 1200 |
Analysis | 需求分析 | 60 | 90 |
Design Spec | 生成设计文档 | 30 | 20 |
Design Review | 设计复审 | 120 | |
Coding Standard | 代码规范 | 30 | |
Design | 具体设计 | 300 | 200 |
Coding | 具体编码 | 1200 | 600 |
Code Review | 代码复审 | 60 | 30 |
Test | 测试 | 120 | 300 |
Reporting | 报告 | 30 | 30 |
Test Report | 测试报告 | 60 | 80 |
Size Measurement | 计算工作量 | 10 | 5 |
Postmortem | 事后总结合计 |
解题思路描述
本数独项目采用结构化开发方法,编写语言为C++。
- 求解思路:
求解思路暂定为深度优先搜索。主要优化方式是调整搜索顺序,首先通过遍历数独得到各行各列各9宫格的空格数,同时统计空格数可以填的数的数量(因为有行列和九宫格的限制),然后进行排序,从数量较小的空格开始遍历。可以减小搜索的时间。
详细思路参考了暴力算法之美:如何在1毫秒内解决数独问题?。 - 生成终局思路:
由数独规则可知,数独终局在成型之后数字的交换不会破坏数独完整性(比如把8和9全部交换),因此可以通过数字交换获得数独终局。共8!种方法。
其次,数独1-3,4-6,7-9行的交换也不会造成数独终局被破坏。因此使用行之间的交换也是一种思路。共有3!*3!*2!种交换。
可行性分析
- 技术可行性:本实验算法实现相对简单,技术风险不大,可行。
- 操作可行性:通过windows系统命令行进行操作,操作简单。
- 经济可行性:消耗的主要是电费和一点点时间,可以接受。
- 法律可行性:本项目为课程作业,单独完成不违背法律。
需求分析(SA):
程序功能是实现一个命令行程序,可以根据命令行参数的不同来进行数独终局的生成和数独的求解。要求数独终局不重复,最终生成文件写入到文件中。
程序开发参与人员包括开发人员和项目管理人员均为本人。
1.数据建模
建立E-R图模型:
2.功能建模:
建立数据流图:
- 顶层
- 第一层
3.行为建模
状态转换图:
实现过程设计:
结构化设计:
-
概要设计:
使用面向数据流的设计方法,采用混合分析法使用数据流图生成软件系统结构图: -
详细设计:
主要的算法是生成数独终局的模块以及求解数独的模块,之后将给出这两个模块的程序流程图。