BIT软工个人项目-数独

Posted foundersquare

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BIT软工个人项目-数独相关的知识,希望对你有一定的参考价值。

GitHub项目地址:

https://github.com/FounDerSquare/SE-sudoku

 

一、任务

  • 实现一个能够生成数独终局并且能求解数独问题的控制台程序。
  • 提交的代码要求经过代码质量分析工具的分析并消除所有的警告。
  • 对项目的首个版本使用性能分析工具找出性能瓶颈并改进。
  • 及时维护仓库与博客。

二、PSP表格

PSP2.1

Personal Software Process Stages

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

30

 

Estimate

估计任务需要时间

30

 

Development

开发

2820

 

Analysis

需求分析(与技术学习)

60

 

Design Spec

生成设计文档

60

 

Design Review

设计复审(同行评审)

180

 

Coding Standard

代码规范

30

 

Design

具体设计

120

 

Coding

具体编码

1260

 

Code Review

代码复审

90

 

Test

测试

1020

 

Report

报告

300

 

Test Report

测试报告

120

 

Size Measurement

计算工作量

60

 

Postmortem& process improvement plan

事后总结并提出改进计划

120

 

 

合计

3150

 

 

三、解题思路描述

       分析具体任务需求可以将任务分为三部分。

       第一部分,生成各不相同的,最多1,000,000个空行隔开的9×9数独终局。一个数独终局的生成可以用第一行的平移来形成。第一行很容易做到1~9不重复,只要下面几行在平移的时候每一行平移错开的位数不同,就可以保证9个行9个列都是不包含重复数字。为了让3×3方格也满足规则,平移时,每三行一组,组内每行间平移错开的位数相差3。这样每三行每三列存在逻辑关系,就能保证3×3方格满足规则。(感觉很像密码学里的凯撒密码)

       大致算法思路是这样,再加上命令行参数的设置和导出到文件的设置就可以了。

       第二部分,求解数独。参考网上一些方法打算采用dfs。

①检查从1到9哪个可以被放在当前的空位;

②找到一个暂时可行的数就先放进去,挪到下一个空位进行操作①;

③如果遇到一个空位填不进去数,返回上一层dfs的递归,重新操作①;

④直到所有的位置都填满了数,递归结束。

  第三部分,性能优化(如果有余力尝试搞GUI)。

以上是关于BIT软工个人项目-数独的主要内容,如果未能解决你的问题,请参考以下文章

[2017BUAA软工]第一次个人项目 数独的生成与求解

软件基础个人工程——数独4

#2018BIT软件工程基础#个人项目:数独

软件工程—个人项目对于生成数独部分的总结

软工个人项目-地铁出行路线规划程序

数独_个人项目