1.)项目地址:
使用语言:c++
2.)PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | |
Planning | 计划 | 20 | 30 | |
·Estimate | ·估计这个任务需要多长时间 | 20 | 40 | |
Development | 开发 | |||
·Analysis | ·需求分析(包括学习新技术) | 120 | 240 | |
·Design Spec | ·生成设计文档 | 420 | 540 | |
·Design Review | ·设计复审(和同事审核设计文档) | / | / | |
·Coding Standard | ·代码规范(为目前的开发制定合适的规范) | 120 | 240 | |
·Design | ·具体设计 | 180 | 240 | |
·Coding | ·具体编码 | 1800 | 2400 | |
·Code Review | ·代码复审 | 300 | 60 | |
·Test | ·测试(自我测试,修改代码,提交修改) | 360 | 1200 | |
Reporting | 报告 | |||
·Test Report | ·测试报告 | 60 | 60 | |
·Size Measurement | ·计算工作量 | 30 | 60 | |
·Postmortem & Process Improvement Plan | ·事后总结,并提出过程改进计划 | 120 | 100 | |
|
合计 | 3550 | 5210 |
3.)解题思路
看到题目的第一想法的就是用回溯法即直接暴力解决,担心时间可能会超时,就去网上找相应的博客,看到好多都是直接用暴力解决的,因为自己代码能力特别差的原因所以有想法但代码写起来仍然费了好大劲,于是又重新上网查找关于代码方面的,也受到了很大启发 ,但实现的函数方面大部分都是借鉴同学的,就是先让第一行全排列然后针对每一个全排列都开始从第二行入手开始一个一个尝试输入判断条件就是行不同列不同和所在宫格不同,那么这就要求在给出任一个坐标的时候都能找到它所在格的第一个位置坐标,所以把这个函数写出来就好了。
4.)设计实现
采用一个n*9*9的三维数组前一位记录是第几个数独,后面则表示棋盘了,然后根据所写的全排列数组先生成第一行的数字,然后从第二行开始依次填1入-9随机数,每次都需先判断是否满足数独规则,因为第一个数字是不能变的跟自己的学号有关,所以每次排列完第一行后都需要把跟自己学号好相关的那个数换到第一个数,但这样能实现的数独很有限,所以还要将除了第一行第一列的其他行列进行随机交换这样所有的全排列进行完成所能实现的数独就超过了题目的要求。
5.)程序性能分析及改进
6.)代码说明
利用回溯法进行数字的填入和求解(函数是询问的同学)