软件工程实践2017第二次作业

1)Github地址

https://github.com/Maple27/sudoku

2)解题思路

  • 个人从小就对数独就很喜欢,对解数独有一定程度的了解,这次自己开发一个构造数独棋盘的程序,我觉的十分有趣并充满挑战。对于开发的思路,我首先想到的是用回溯法,参考了一些网上资料,又看了看题目需求需要生成N个不重复的已解数独棋盘,想到了使用随机数来控制随机棋盘的生成,虽然在特定条件下棋盘会出现重复,但由于我通过当前时间来控制随机数的产生,所以产生重复数独的几率是很小的(暂未想到更好的解决方案)。

3)设计实现

  • 本程序由于没有太复杂的调用和功能,所以采用C语言完成,没有使用到面向对象思想。本程序共有4个函数(主函数,回溯法构造数独棋盘函数,检查数字合法性函数,输出函数),其中主函数调用回溯法构造函数,构造函数里再调用检查函数和输出函数实现整体功能。

4)代码说明

  • 检查数字合法性

      //横向检查for (p = 0; p < 9; p++)if (p != i && sudoku[p][j] == t)return 0;//纵向检查for (p = 0; p < 9; p++)if (p != j && sudoku[i][p] == t)return 0;//九宫格内检查 p = i / 3;q = j / 3;for (m = p * 3; m < p * 3 + 3; m++)for (n = q * 3; n < q * 3 + 3; n++)if (m != i && n != j && sudoku[m][n] == t)return 0;
  • 回溯法

      while (1){int i = k / 9;int j = k % 9;while (1){sudoku[i][j]++;if (sudoku[i][j] == 10){sudoku[i][j] = 0;k--;break;}else if (check(sudoku, i, j) == 1){k++;break;}}}

5)测试运行


6)改进

  • 在改进程序性能方面上大概话费了2个小时,我的改进主要是针对如何进行错误输入的判断和暴力回溯法对CPU和内存的影响,其中还存在一些没有解决的问题。
  • 性能分析图:

7)PSP表格

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

转载于:https://www.cnblogs.com/Maple27/p/7500939.html

软件工程实践2017第二次作业相关推荐

  1. 软件工程实践2017第二次作业-----个人项目实战之数独

    软件工程实践2017第二次作业-----个人项目实战之数独 最后一门考试2017.9.16 github地址:https://github.com/ssuo/shudu 题目地址:http://www ...

  2. 软件工程python就业方向-软件工程实践2019第二次作业

    前言 自己在第一次作业中写下的目前最想学的技术是**"学习好软件方向的各种技术,熟练运用编程语言"**.再怎么说,这也太过宽泛了,而且想在一学期做到这一点是不现实的.自己曾在大一系 ...

  3. 软件工程实践2017第一次结对作业

    结队项目--第一次作业 1. 结对成员: 031502614 赖志平 031502627 王国华 2.NABCD N (Need, 需求) 首先,提出的需求如下: 要解决的困扰:流程繁琐复杂,各个部门 ...

  4. 软件工程实践 2017 第一次作业

    砥砺前行 软件工程实践 2017 第一次作业 今年又重拾 cnblogs,上一次也是张栋老师教的面向对象程序设计,在我所经历过的教学方式中,这样的可以说是较为独特的--强烈的实践和理论相结合的模式,鼓 ...

  5. 软件工程2017第二次作业

    GitHub:sudoku 解题思路描述 刚看到题目的时候,我去,好难.吃了根冰棍冷静下来,开始细细思考.题目的要求是随机生成N个不重复的数独棋盘,有两种方案:1.用数字1~9填满第一个九宫格,然后再 ...

  6. 20189222 《网络攻防实践》第二周作业

    20189222<网络攻防实践>第2周学习总结 教材学习内容总结 第一章: 要点1:分清黑客与骇客,提倡在掌握技术的同时,还要遵循黑客道德与法律法规. 要点2:网络攻防的主要内容包括系统安 ...

  7. 【Web编程实践课第二次作业】体育新闻世界

    夢に敗れた幼き人 被梦想打败的幼稚的人 憧れたヒーローには 是无法变成自己 成れやしないんだ 所憧憬的英雄的 現実に叩き起された時 被现实叫醒的时候 理想郷は離れて 理想的桃花源便会离去 崩れ落ちてき ...

  8. 17秋 软件工程 结对项目 第二次作业

    作业地址 结对第二次作业 结对成员 陈翔, 031502209; 李鸣, 031502316. Github Deputy: Department-to-Student bidirectional s ...

  9. 软件工程实践2017结对第二次作业

    结对成员:吴君毅(031502629),吴伟根(031502631) Github链接:https://github.com/n9705/Dep-Stu 一. 题目要求 构造部门和学生输入数据的生成程 ...

最新文章

  1. java accept encoding_Accept-Encoding gzip 乱码 和Okhttp的解决方法
  2. MelGan原理与实践篇
  3. 操作系统概念学习笔记 11 进程同步(一)
  4. 数据结构 单链表 (C++)(转载)
  5. ML.NET 示例:图像分类模型训练-首选API(基于原生TensorFlow迁移学习)
  6. android 单元测试 多线程,单元测试多线程Android RxJava
  7. 【Leetcode】102. 二叉树的层次遍历
  8. SpringBoot2.X + SpringCache + redis解决乱码问题
  9. a标签 href和onclick 传递的this区别
  10. 【转】解决“你没有权限访问,请与网络管理员联系”
  11. 画中画功能的遥控器按键设计
  12. 计算机中vlookup函数公式,Excel表中VLOOKUP函数使用方法和操作实例
  13. 公司邮箱怎么注册?公司企业邮箱怎么登录?
  14. 百度AI评测:红酒识别
  15. Linux 打包可执行文件
  16. mysql索引执行顺序_mysql索引及sql执行顺序
  17. HTML基础(五)——a标签
  18. 多角度透彻理解渐近表示法(大O表示法)
  19. GitHub的高级搜索方式--找到最想要的源码
  20. 火山引擎、阿里云、腾讯云联合发布“超低延时“直播技术标准

热门文章

  1. document.getElementsByTagName()方法的返回值
  2. css教程之列表属性
  3. gridView里如何添加详情按钮,点击它可以转到另一页,以获取该行的详细信息。
  4. 零成本学Arduino单片机之入门
  5. golang中的sync.Map
  6. golang操作文件
  7. vector的resize()和reserve()函数
  8. c++顺序容器vector用法
  9. 线程:等待/通知机制
  10. iOS - UISearchController