[软件工程基础]个人项目——数独

目录

一、Github项目地址

二、PSP估计

三、解题思路描述

3.1、 生成终局

3.1.1、暴力搜索——回溯法

3.1.2、模板法

3.2、求解数独

3.2.1、暴力搜索——回溯法

3.2.2、回溯+扫描法

3.3、数独挖空

四、设计实现过程

4.1、代码规范

4.2、函数设计

4.2.1、程序基本流程图

4.2.2、函数关系图

4.3、单元测试 

五、改进性能

5.1、算法优化

5.1.1、生成终局部分

5.1.2、求解数独部分

5.2、输入输出优化

六、代码说明

6.1、生成终局部分

6.2、求解数独部分

七、PSP实际

八、心路历程与收获



一、Github项目地址

项目地址:

https://github.com/XCyclone/PersonalProject-Sudoku

 

二、PSP估计

PSP2.1  Personal Software Process Stages 预估耗时(分钟)   实际耗时(分钟)   
Planning 计划 60  
·Estimate ·估计这个任务需要多少时间 60  
Development 开发 1560  
·Analysis ·需求分析(包括学习新技术) 120  
·Design Spec ·生成设计文档 60  
·Design Review ·设计复审(和同事审核设计文档) 60  
·Coding Standard ·代码规范(为目前的开发制定合适的规范) 40  
·Design ·具体设计 60  
·Coding  ·具体编码 900  
·Code Review ·代码复审 120  
·Test ·测试(自我测试,修改代码,提交修改) 200  
Reporting 报告 380  
·Test Report ·测试报告 120  
·Size Measurement ·计算工作量 60  
·Postmortem & Process Improvement Plan ·事后总结,并提出过程改进计划 200  
  合计 2000  

三、解题思路描述

本项目可以分为三大块:

  1. 确定终局生成、数独求解的算法
  2. 进行代码测试、性能分析
  3. 进行版本管理、项目规范

3.1、 生成终局

生成终局部分主要有如下几个条件:

  1. 生成的数独终局不重复
  2. 生成个数在1到1e6之间
  3. 文件内的格式:数与数之间由空格分开,终局与终局之间空一行,行末无空格

3.1.1、暴力搜索——回溯法

对于生成不重复的满足所在行、所在列、所在3*3方格内均无重复数字的终局,首先想到的肯定是暴力搜索,对于每一个空尝试填入符合规则的数,然后递归求解,这样可以保证生成有效终局并且不重复,但经过测试这样在生成1e6的条件下速度较慢。

3.1.2、模板法

由于暴力搜索速度较慢,所以想尝试其他方法,经过在网上的相关算法的搜索,发现了一种较为简单便捷的生成方法——模板法。参考链接:数独终盘生成的几种方法数独终盘模板

设置一个固定的字母模板,通过对模板中不同字母的赋值,可以生成不同的终局。由于终局的第一位为(2+1)%9+1 = 4(学号后两位相加%9+1)剩下的八位可以通过递归在1~3、5~9之间顺序赋值,这样可以产生8!=40320个终局。采用模板如下:

i g h c a b f d e
c a b f d e i g h
f d e i g h c a b
g h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值