zoukankan      html  css  js  c++  java
  • 第二次作业——个人项目实战

    1)Github项目地址
    2)耗费的时间
    3)解题思路

    刚看到这个题目的时候,感觉一脸懵逼,我以为要设计一个数独游戏,后来认真看了一下,是生成求解完的数独,这就比较简了,
    附加题好像是做数独游戏的,百度看了一下数独的游戏规则,稍微有了一些想法。一共是9x9=81个空格,可以划分成9个3x3,
    然后生成一个1~9的随机序列,依次把这几个序列填入九个大空格,同时判断同一行和同一列不能有相应的数字,后来发现
    这个想法很容易进入死胡同。

    4)设计实现

    百度了一下,发现别人写的一个置换算法,先生成中间的3x3,然后生成上下左右四个3x3,
    最后生成四个角的3x3。直接把代码拷贝了过来,再进行一些修改,就可以了。

    5)代码说明

    // 初始化中间的九宫格
    void centerInit()
    {
    	src.clear();
        for (int i = 0; i < N; ++i)
            src.push_back(i + 1);
        random_shuffle(src.begin(), src.end()); // 随机化序列
     
        int k = 0;
        for (int i = 3; i < 6; ++i)
            for (int j = 3; j < 6; ++j)
                table[i][j] = src[k++];
    }
    // 由中间的九宫格交叉变换,初始化上下左右四个九宫格
    void crossInit()
    {
        for (int i = 3; i < 6; ++i)
        {
            int l = 0;
            for (int j = 3; j < 6; ++j)
            {
                if (i == 3)
                {
                    table[i + 1][l] = table[i][j];
                    table[i + 2][l + 6] = table[i][j];
                    ++l;
                }
                else if (i == 4)
                {
                    table[i + 1][l] = table[i][j];
                    table[i - 1][l + 6] = table[i][j];
                    ++l;
                }
                else if (i == 5)
                {
                    table[i - 2][l] = table[i][j];
                    table[i - 1][l + 6] = table[i][j];
                    ++l;
                }
            }
        }
        for (int j = 3; j < 6; ++j)
        {
            int l = 0;
            for (int i = 3; i < 6; ++i)
            {
                if (j == 3)
                {
                    table[l][j + 1] = table[i][j];
                    table[l + 6][j + 2] = table[i][j];
                    ++l;
                }
                else if (j == 4)
                {
                    table[l][j + 1] = table[i][j];
                    table[l + 6][j - 1] = table[i][j];
                    ++l;
                }
                else if (j == 5)
                {
                    table[l][j - 2] = table[i][j];
                    table[l + 6][j - 1] = table[i][j];
                    ++l;
                }
            }
        }
    }
     
    // 初始化四个角上的四个九宫格
    void cornerInit()
    {
        for (int i = 0; i < 3; ++i)
        {
            int l = 0;
            for (int j = 3; j < 6; ++j)
            {
                if (i == 0)
                {
                    table[i + 1][l] = table[i][j];
                    table[i + 2][l + 6] = table[i][j];
                    ++l;
                }
                else if (i == 1)
                {
                    table[i + 1][l] = table[i][j];
                    table[i - 1][l + 6] = table[i][j];
                    ++l;
                }
                else if (i == 2)
                {
                    table[i - 2][l] = table[i][j];
                    table[i - 1][l + 6] = table[i][j];
                    ++l;
                }
            }
        }
        for (int i = 6; i < 9; ++i)
        {
            int l = 0;
            for (int j = 3; j < 6; ++j)
            {
                if (i == 6)
                {
                    table[i + 1][l] = table[i][j];
                    table[i + 2][l + 6] = table[i][j];
                    ++l;
                }
                else if (i == 7)
                {
                    table[i + 1][l] = table[i][j];
                    table[i - 1][l + 6] = table[i][j];
                    ++l;
                }
                else if (i == 8)
                {
                    table[i - 2][l] = table[i][j];
                    table[i - 1][l + 6] = table[i][j];
                    ++l;
                }
            }
        }
    }
    
    

    6)测试运行

    7)性能分析



    数据量比较少时,耗时最多的是初始化函数,生成随机序列,数据量很大时,就变成了输出函数。

    8)实际花费的时间

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 30 30
    · Estimate · 估计这个任务需要多少时间 300 360
    Development 开发 240 300
    · Analysis · 需求分析 (包括学习新技术) 120 120
    · Design Spec · 生成设计文档 10 10
    · Design Review · 设计复审 (和同事审核设计文档) 20 20
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
    · Design · 具体设计 10 10
    · Coding · 具体编码 180 240
    · Code Review · 代码复审 30 30
    · Test · 测试(自我测试,修改代码,提交修改) 60 60
    Reporting 报告 60 60
    · Test Report · 测试报告 10 10
    · Size Measurement · 计算工作量 10 10
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 20
    合计
  • 相关阅读:
    排序-希尔排序
    排序-选择排序
    排序-插入排序
    排序-冒泡排序
    微服务容错处理—Hystrix初探
    声明式REST调用—Feign初探
    linux常用搜索文件命令
    Volecity模板引擎学习笔记
    页面间传递前端请求参数和获取参数:Model model,HttpServletRequest request, ModelMap map参数使用与区别
    httpServeltRequest和Model传值的区别
  • 原文地址:https://www.cnblogs.com/zhuangjiaxin/p/7502167.html
Copyright © 2011-2022 走看看