软件工程基础个人项目——数独
点击这里可看github上的具体代码
本次个人项目关于数独的生成与求解
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 1520 | |
Development | 开发 | ||
Analysis | 需求分析 | 20 | |
Design Spec | 生成设计文档 | 60 | |
Design Review | 设计复审 | ||
Coding Standard | 代码规范 | ||
Design | 具体设计 | 120 | |
Coding | 具体编码 | 600 | |
Code Review | 代码复审 | 200 | |
Test | 测试(自我测试,提交代码,代码修改) | 400 | |
Reporting | 报告 | 30 | |
Test Report | 测试报告 | 30 | |
Size Measurement | 计算工作量 | 30 | |
Postme & Process Improvement Plan | 事后总结并提出过程改进计划 | 30 | |
合计 | 1520 |
思路描述
最开始看到题目的时候,感觉压力很大,因为在此之前我从未了解过数独,担心自己不能很好的理解数独,更不要说通过代码编写让计算机完成数独的求解和生成了。但是在网上是可以找到很多之前学姐学长们智慧的结晶,在本次个人项目上为我提供了很多帮助。我先从网上找寻了关于数独的有关内容,大致明白了数独的概念,也尝试的自己手动解了解数独。那么怎么更好的通过计算机实现数独的生成与求解呢。我看了很多相关博客,找到了我能理解也觉得比较简单的方法。
生成数独:先生成一个1-9的无重复的排列,再将此排列平移。除了第一行之外的每一行,都是通过第一行向右平移某位生成,出去的数字回到排列左端。
求解数独:
使用回溯方法,同时设立vis来确定是否可以将某数字放在某位置上,参考了之前某位学长或者学姐的博客,最终确定这个方法。
程序实现过程
数独的生成:
写一个函数Create_sudoku(),
这是我最开始的想法,后来为了方便管理,我写了一个class Sudo,在其中创建了create 函数。
数独的求解:
求解是solve函数,中心思想回溯由Traceback()执行,其中设立的vis数组判断数字是否可以放在某位置上。需要setvis(),resetvis(),checkvis(),共同完成其功能。
设计图
性能分析
进行数独的生成时,根据生成不同数量的数独的命令行进行分析,生成了不同的分析图。可能由于我把函数都写在一个大类中,进行分析时发现,时间占比最多的函数并不是我写的,而是存在于动态链接库中的函数。最终分析工具并没有指出函数名,显示说是调用堆栈的底部的函数
代码说明
主要是将运用的函数装在Sudo类里
class Sudo
{
public:
void create(int num);
void solve(char* file);
void setvis(int m, int n, int num);
void resetvis(int m, int n, int num);
bool checkvis(int m, int n, int num);
void TraceBack(int n);
};
最终时间
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 1520 | |
Development | 开发 | ||
Analysis | 需求分析 | 20 | 30 |
Design Spec | 生成设计文档 | 60 | 60 |
Design Review | 设计复审 | ||
Coding Standard | 代码规范 | ||
Design | 具体设计 | 120 | 140 |
Coding | 具体编码 | 600 | 700 |
Code Review | 代码复审 | 200 | 150 |
Test | 测试(自我测试,提交代码,代码修改) | 400 | 400 |
Reporting | 报告 | 30 | 50 |
Test Report | 测试报告 | 30 | 50 |
Size Measurement | 计算工作量 | 30 | 30 |
Postme & Process Improvement Plan | 事后总结并提出过程改进计划 | 30 | 20 |
合计 | 1520 | 1630 |