• 2020软件工程作业03


    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
    作业正文 本文
    参考文献 百度,CSDN

    GitHub地址:https://github.com/yaoDMS/123456/tree/master/sudoku

    PSP表格

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

    解题思路

    利用九宫格行列不能重复的性质,在二维数组中实现。

    实现过程

    流程图

    image-20200329192802020

    由于3,5,7这三阶数独没有宫,因此可以看成同一类;而4,6,8,9这四阶数独有不同的宫,因此分开来写。把需要求的空余部分用0来代替。

    public static void DFS(char[][] arr, int x, int y) {
        if(x == m){
            print(arr);
            System.exit(0);
        }
        if(arr[x][y] == '0'){
            for(int i = 1; i < m+1; i++){
                if(check(arr, x, y, i)){
                    arr[x][y] = (char)('0' + i);
                    DFS(arr, x + (y + 1) / m, (y + 1) % m);
                }
            }
            arr[x][y] = '0';
        }else{
            DFS(arr, x + (y + 1) / m, (y + 1) % m);
        }
    }
    
    public static boolean check(char[][] arr, int x, int y, int k){
        if(m==3||m==5||m==7) {
            for(int i = 0; i < m; i++){
                if
                (arr[x][i] == (char)('0' + k) || arr[i][y] == (char)('0' + k))
                {
                    return false;
                }
    
            }
        }
    
    case 4:
        for(int i = 0; i < m; i++){
            if (arr[x][i] == (char)('0' + k) || arr[i][y] == (char)('0' + k)) {
                return false;
            }
    
        }
        for(int i = (x / 2) * 2; i < (x / 2 + 1) * 2; i++){
            for(int j = (y / 2) * 2; j < (y / 2 + 1) * 2; j++){
                if(arr[i][j] == (char)('0' + k)){
                    return false;
                }
            }
        }
        break;
    case 6:
        for(int i = 0; i < m; i++){
            if (arr[x][i] == (char)('0' + k) || arr[i][y] == (char)('0' + k)) {
                return false;
            }
    
        }
        for(int i = (x / 2) * 2; i < (x / 2 + 1) * 2; i++){
            for(int j = (y / 3) * 3; j < (y / 3 + 1) * 3; j++){
                if(arr[i][j] == (char)('0' + k)){
                    return false;
                }
            }
        }
        break;
    case 8:
        for(int i = 0; i < m; i++){
            if (arr[x][i] == (char)('0' + k) || arr[i][y] == (char)('0' + k)) {
                return false;
            }
        }
        for(int i = (x / 4) * 4; i < (x / 4 + 1) * 4; i++){
            for(int j = (y / 2) * 2; j < (y / 2 + 1) * 2; j++){
                if(arr[i][j] == (char)('0' + k)){
                    return false;
                }
            }
        }
        break;
    case 9:
        for(int i = 0; i < m; i++){
            if (arr[x][i] == (char)('0' + k) || arr[i][y] == (char)('0' + k)) {
                return false;
            }
        }
        for(int i = (x / 3) * 3; i < (x / 3 + 1) * 3; i++){
            for(int j = (y / 3) * 3; j < (y / 3 + 1) * 3; j++){
                if(arr[i][j] == (char)('0' + k)){
                    return false;
                }
            }
        }
        break;
    

    运行结果

    静态检测

    没什么大问题

    性能分析

    总结

    看到这个作业,我是真的不想写,总觉得它很麻烦,于是我在题目发布好几天后都没看。直到班级里有人交了之后才仔细看,仔细想。本来基础就不好,更不想做。但环境配置好了之后,发现也不怎么麻烦,还是有收获的。

  • 相关阅读:
    mysql性能优化
    jdbc connectoin timeout
    java thread dump
    sso实现原理
    api的防重放机制
    java各版本新特性总结
    sql区分大小写的查询
    按分数排名
    MySql常用语句
    mysql之explain用法
  • 原文地址:https://www.cnblogs.com/ydm20177597/p/12594373.html
Copyright © 2020-2023  润新知