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


    github:https://github.com/hhhyg/world

    首先我们知道,整个大九宫格(九九八十一格)中我们只能填入数字1-9,而我们看到的是横行、竖行和小九宫格都是九格,也就是说,我们在横行、竖行和小九宫格都必须使用到这九个数字。

    解题思路1:

    若我们要生成一组数独完全解,那如果按传统的回溯方法来产生,那我们首先会从第一个方格(从左至右,从上至下)开始,先从1-9九个数字中选取一个数字填入该处,然后我们再从第二个方格开始,选取八个数字(按数独规则不能重复,则要除去刚刚填入的一个数字)中的一个,依此下去选填数字……当然后续方格中选择的数字,都会因为数独规则,使其所在横行、竖行和小九宫格中,其他已填方格中的数字对该处可填入的数字产生不同的条件约束。某种情况下,我们可能发现填到某格时,由于数独规则约束我们已经没有数字可以填入该处了,这时候我们就要开始回溯了,撤销上一步填入的数字,重新选择一个数字填入上一步的方格,然后继续开始本次的填数,若不行还得继续回溯。有时会因为某种制约,导致我们要不停回溯撤销重填.

    思路2:

    数独有九个九宫格,先填其中一个九宫格,按题目要求,先填第一个九宫格。因为左上角第一个固定,所有8!=40320种变换,通过交叉变换方法,能每个1~9排列能生成25种不同数独,所以满足n<=1000000。
    因为没有学过用c'c++写随机数所以我就选择了第二种思路。

    int main()
    {
    int i;
    int a[9];
    srand ( time(NULL));
    for (i=0;i<9;i++)
    {
    a[i]=rand()%10;
    printf("%d ",a[i]);

     } 
     i=rand()%10;
     printf("
    %d
    ",a[i]);
     return 0;
    

    }这是上网查得随机数的代码,暂时还看不懂srand等作用所以就没用思路1
    这是在命令行中运行结果

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 400 660
    · Estimate · 估计这个任务需要多少时间 500 1000
    Development 开发 400 800
    · Analysis · 需求分析 (包括学习新技术) 55 110
    · Design Spec · 生成设计文档 45 0
    · Design Review · 设计复审 (和同事审核设计文档) 40 0
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 40
    · Design · 具体设计 20 50
    · Coding · 具体编码 0 0
    · Code Review · 代码复审 60 30
    · Test · 测试(自我测试,修改代码,提交修改) 60 100
    Reporting 报告 60 90
    · Test Report · 测试报告 10 0
    · Size Measurement · 计算工作量 20 10
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 40 20
    合计
  • 相关阅读:
    尝试Spring Data Jpa--告别CRUD
    SSM框架开发web项目系列(七) SpringMVC请求接收
    SSM框架开发web项目系列(六) SpringMVC入门
    SSM框架开发web项目系列(五) Spring集成MyBatis
    SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL
    SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
    SSM框架开发web项目系列(二) MyBatis真正的力量
    从MVC到Ajax再到前后端分离的思考
    SSM框架开发web项目系列(一) 环境搭建篇
    antd4.0 定制主题
  • 原文地址:https://www.cnblogs.com/piep/p/7502311.html
Copyright © 2020-2023  润新知