zoukankan      html  css  js  c++  java
  • 软件工程实践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
    合计
  • 相关阅读:
    背水一战 Windows 10 (61)
    背水一战 Windows 10 (60)
    背水一战 Windows 10 (59)
    背水一战 Windows 10 (58)
    背水一战 Windows 10 (57)
    背水一战 Windows 10 (56)
    背水一战 Windows 10 (55)
    背水一战 Windows 10 (54)
    背水一战 Windows 10 (53)
    背水一战 Windows 10 (52)
  • 原文地址:https://www.cnblogs.com/piep/p/7502311.html
Copyright © 2011-2022 走看看