github地址:https://github.com/Duuang/Project-Sudoku

日期:2018-12-15

2. 拿到题目之后

这个就是相当于自己做一个项目嘛,体验项目的全套开发过程。

于是我打算,一定不能上来就啪啪啪写代码,要遵循软件工程规范从头到尾体验一次,肯定会有不少收获,也能为之后真正做项目打下基础。

于是:先要决定大概的软件开发流程,我选择的迭代的开发模型,流程大概是:

    可行性分析与计划->需求分析->设计->实现->测试->提交,并反复迭代

一、可行性分析与计划:

1. 可行性分析:(肯定可行。。)

2. 计划: 已经在上篇博客中给出,用PSP 2.1表格做出了计划

二、需求分析:

从pdf文档中获取,项目中的需求还是写的很清楚的,分为:①生成数独  ②求解数独

解题思路:

1. 生成数独:

可以理解为,就是要生成100万个不重复的数独(左上角数字固定),然后保存在文件里,关键还有个时间限制,60秒内要能生成1000个,并且速度越快越好。

先不考虑性能需求,生成100万个重复数独。我去查了一下,不同的数独大概一共有6.671*10^21种。。感觉生成100万个不是小意思嘛?用最暴力算法的话,相当于从左上角,一个格子一个格子的从1到9生成,如果不满足条件就回溯,继续查找,就相当于不剪枝的回溯法,直接枚举,这样甚至都能够把所有可能解按照dfs顺序都枚举出来。

但是。。。估计了一下,可能太慢了,剪枝的话目测也提升不了太多速度。关键是。。只要生成6.671*10^21中的100万个就行,从头挨个枚举有点蠢。。

后来搜索数独生成算法,看到了一些高级算法,感觉还是有点扯大了。再后来在一篇博客中看到了9!这个数,有362880这么大。。那岂不是只要构造出来仨数独,然后1到9全排列一下,按不同顺序塞进去,不就完事了?(然后直接怒敲了仨9×9的数组上去)后来发现左上角固定。。 8!是40320,也就是说需要25个数独,8个数全排列。所以就转为考虑,能不能生成出来25个不同数独?(不能经过全排列之后相同)

后来发现能,第一排不妨假设就是1到9,那把第二行的456和789,两个都全排列下,就有了6*6=36种基本数独,问题解决!

所以就是先生成25个基础数独,再按8!全排列下,就有了100万个

当然还有两个问题就是读控制台参数并做错误处理,和将数独按格式写入文件,不过这两个都简单,不涉及到算法

2. 求解数独

看了下,没有性能要求!所以只考虑可接受时间内可解即可。而且不是要枚举出全部解,是只要一个解即可。

那就简单了,因为数独题里空多的话,枚举的可能性少,好填;数独题里空少的话,约束也少,也很容易就能枚举出一个合格解。所以其实直接回溯枚举+剪枝即可。(甚至剪枝都不必要)如果追求好点的解法,优先选可能性少的、启发式信息有利的空格来进行节点扩展,肯定速度能提升很多。当然还有很多高级算法,不过好多算法都是为了求数独的完全解的,没必要。

所以最后决定就是回溯+剪枝,有机会的话会尝试更好一些的算法。

三、阶段总结和收获:

正式开始正规的软工项目流程了!拿到题目后做了计划,先通过读pdf,分析了需求,然后通过查阅资料、自己思考,有了一个大概的解题思路。至此,可行性分析与计划、需求分析阶段结束。

收获就是,体会到了需求对项目思路的重要性。。要是这个需求是生成哪怕再多两个数量级的数独,那这个方法恐怕都已经不奏效了。。因为这个输入最大只有100万,于是可以方便的用更快速更简单的算法来达到需求。(毕竟达到需求就可以交付了嘛,比如用了个能生成全部数独的算法,但是人家输入就100万,那超出100万的部分其实就是没用处的..)

【数独个人项目】2. 拿到题目之后相关推荐

  1. 数独小项目开篇:DFS解决数独难题

    数独小项目开篇:DFS解决数独难题 前言 DFS解决数独问题思路 代码实现细节 样例测试 总结 Reference 前言   这周小刀是挺忙的,周末加班,哎,谁不是996呢?(打工魂燃烧吧~   这次 ...

  2. 2022广东省安全员B证第四批(项目负责人)上岗证题目及在线模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2022年广东省安全员B证第四批(项目负责人)上岗证题库系广东省安全员B证第四批(项目负责人)国家题库新版教材大纲题库!2022广东省安全员B证第四批(项 ...

  3. 2022年广东省安全员B证第三批(项目负责人)上岗证题目及模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2022保育员(中级)考试100题系保育员(中级)复审题库新版习题库!2022保育员(中级)复训题库及在线模拟考试根据保育员(中级)最新教材汇编.保育员( ...

  4. 深度学习实战项目:速算题目批改

    深度学习实战项目:速算题目批改 前言 一.摘要 二.项目框架 三.项目步骤 1. 数据处理 1.1 数据收集 1.2 数据打标 1.3 数据预处理 2. 模型训练 2.1 目标检测 2.1.1 模型介 ...

  5. 项目中的有趣题目 -- 吃饺子问题

    题目描述: 近日,项目中偶遇一个有趣的题目,感慨多多,备忘之.抽象出来,大致是: 桌上一共有100个饺子,其中有10个饺子包了硬币,问:连续吃到硬币的期望次数是多少次? 首先,定义一下这里的连续,如果 ...

  6. 软件工程师如何测试项目,【软件测试工程师(华为项目)软件工程师面试题目|面试经验】-看准网...

    2011.3.30:一面 早上鸡还没叫我就醒来了,在家里简单地打扮打扮,重塑个人形象,胡子长的剃,头发乱的修,然后边穿衣服边拉裤链左手拎包右手锁门地就从家里出来了. 其实,上周三的时候我就收到了面试通 ...

  7. 天津项目学生实践抓阄题目

    有趣的企业shell实战编程题:好消息,老男孩培训学生外出企业项目实践机会(第6次)来了(本月中旬),但是,名额有限,队员限3人(班长带队). 因此需要挑选学生,因此需要一个抓阄的程序: 要求: 1. ...

  8. 数独——个人项目(项目地址)

    一.项目GitHub地址:https://github.com/lc1997622/SudokuProject 二.PSP表格记录: PSP Personal Software Process Sta ...

  9. 数独(一道经典的dfs题目)

    数独 数独是一种传统益智游戏,你需要把一个 9×9 的数独补充完整,使得图中每行.每列.每个 3×3 的九宫格内数字 1∼9 均恰好出现一次. 请编写一个程序填写数独. 输入格式 输入包含多组测试用例 ...

最新文章

  1. Linux内核调试 - 一般人儿我都不告诉他(一)【转】
  2. jquery ajax返回Internal server error 500错误解决方案
  3. SDL 实现多线程 的一些BUG
  4. spring各种邮件发送
  5. 中达变频器参数_台达变频器:满足未来驱动需求
  6. unity的自带特性
  7. 新手教程:用像素游戏制作大师MV开发游戏(一)
  8. javascript异步_JavaScript异步并在循环中等待
  9. Cake Frosting:更具可维护性的C#DevOps
  10. linux下限制ip访问
  11. 南阳OJ 16 矩形嵌套
  12. 浏览器htmlcss面试题
  13. 中兴网络机顶盒-ZXV10 B860AV1.1-t装第三方软件实现直播
  14. python解析word文档首、尾页
  15. goldendict 屏幕取词
  16. 《SysML精粹》学习记录--第九章
  17. 数据外泄保护与国土安全部
  18. 2021年5月23日《一开口就让人喜欢你》读后感
  19. 阿翔编程学-计算机网络安全知识摘要
  20. GlusterFS基本部署

热门文章

  1. 怎么用python画一个皮卡丘,用python画皮卡丘的代码
  2. 主力吸筹猛攻指标源码_主力吸筹猛攻指标源码_股市吸筹
  3. 为什么刹车热了会失灵_急!我的刹车为什么突然不管用了?
  4. bitcoin(1)
  5. 计算机二级柏林是第几套,2019年计算机二级Office考试内容及时间安排(内附两套原题库)...
  6. 自动复制吱口令html,【月入六万】吱口令,网页自动复制,进支付宝提示领红包源码...
  7. springboot集成graphql(一)
  8. 计算机学院论文谢辞怎么写,论文致谢:函授毕业论文谢辞怎么写
  9. 实数取整(指针专题)
  10. Connection接口