• 2020软件工程作业03


    这个作业属于哪个课程https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494
    这个作业的目标 Sudoku
    作业正文  如下
    其他参考文献 百度

    1.Github项目地址

    https://github.com/villanelleshang/dejavu/tree/master/20177618

    2.PSP表格

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

    3.思路

    回溯法

    首先给出解法的主体,利用回溯的思想。

    void backtrace(int n)//回溯法进行填数
    {
        int i;
        if (n == m * m)//满了就完成填数
        {
            output();//输出结果
            return;
        }
        int row = n / m;
        int col = n % m;
        if (a[row][col] == 0)
        {
            for (i = 1; i <= m; i++)
            {
                if (check(n,i))//可以填数
                {
                    a[row][col] = i;
                    backtrace(n + 1);//进入下一层函数
                    a[row][col] = 0;//回溯
                }
            }
        }
        else
        {
            backtrace(n + 1);//进入下一层函数
        }
    }
     

    根据介绍,可以看出填数时需要验证行列以及宫内是否重复,由此
    由于357宫格不用验证宫,4689需要验证,check()函数中需要一个判断是否验证宫的部分,若需要验证,则调用check_gong()函数进行验证。

    下面给出check函数和检验宫的check_gong函数

    bool check(int n,int x)//行和列的验证
    {
        int row = n / m;
        int col = n % m;
        int i, j, k=1;
        for (i = 0; i < m; i++)//验证行
        {
            if (a[row][i] == x) return false;
        }
        for(j = 0; j<m; j++)//验证列
        {
            if (a[j][col] == x) return false;
        }
        //判断是否需要验证宫
        if (m == 4) k = check_gong(n, x, 2, 2);
        else if (m == 6) k = check_gong(n, x, 2, 3);
        else if (m == 8) k = check_gong(n, x, 4, 2);
        else if (m == 9) k = check_gong(n, x, 3, 3);
        if(k==1) return true;
        else return false;
    }
    
    bool check_gong(int n, int x, int row, int col)//验证宫
    {
        int i, j;
        int r = n / m;
        int c = n % m;
        r = r / row * row;
        c = c / col * col;
        for (i = r; i < (r + row); i++)
        {
            for (j = c; j < (c + col); j++)
            {
                if (a[i][j] == x) return false;
            }
        }
        return true;
    }

    下面给出3宫格到9宫格的输入输出文件截图

     测试图 3456789宫格

      

    Code Quality Analysis分析

     Studio Profiling Tools测试

     总结

    心累

  • 相关阅读:
    JavaScript基本数据类型
    被遗弃的HTML事件处理程序
    jQuery中Ajax封装的方法
    观察者模式
    Git仓库初始化与推送到远端仓库
    使用Jax-rs 开发RESTfull API 入门
    普通 Java 项目转换为 Maven 项目
    在网页边角添加GitHub链接图标
    MyBatis 3 与 Spring 4 整合关键
    Thymeleaf 3与Spring MVC 4 整合配置
  • 原文地址:https://www.cnblogs.com/villanelel/p/12592505.html
Copyright © 2020-2023  润新知