• 软件工程实践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
  • 相关阅读:
    Uva1595 对称轴
    Uva712 S树
    Uva673 平衡的括号
    leetcode102 二叉树的层次遍历
    Uva10191 复合词
    C++ multimap的用法
    Uva1103 古代象形符号
    UVa10763 交换学生
    C++ 优先级队列 priority_queue
    ios,zepto穿透解决方案
  • 原文地址:https://www.cnblogs.com/Maple27/p/7500939.html
Copyright © 2020-2023  润新知