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

软件工程实践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
posted @ 2017-09-10 13:50  Maple27  阅读(196)  评论(4编辑  收藏  举报