zoukankan      html  css  js  c++  java
  • 2020软件工程作业03

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

     

     

     

     

     

      1.GitHub地址:https://github.com/stars123456?tab=repositories

    2.PSP表格

     

    PSP2.1 Personal Software Process Stage 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 20 30
    Estimate 估计这个任务需要多少时间 30h 56h
    Developmrnt 开发 4h 5h
    Analysis 需求分析(包括学习新技术)

    1.5h

    2h

    Design Spec 生成设计文档 30 50
    Design Review 设计复审 40 40
    Coding Standard 代码规范(为目前的开发制定合适的规范) 40 1h
    Design 具体设计 3h 4h
    Coding 具体编码 3h 4h
    Code Review 代码复审 1h 1.5h
    Test 测试(自我测试,修改代码,提交修改) 1h 1.5h
    Reporting 报告 30 40
    Test Repor 测试报告 30 30
    Size Measurement 计算工作量 30 30
    Postmortem&Process Improvement Plan 事后总结,并提出过程改进计划 40 50
    合计   51.7h 79.5h

    3.解题思路

    刚开始看这个题目的时候整个人都是懵的,根本不知道从哪里开始下手,都准备放弃了。后面只能像赶鸭子上架一样不断寻求大佬的帮助和在百度上查找资料,然后慢慢的对题目有了点头绪,知道数独要用回溯法来解

    4.代码设计

    #include <stdio.h>
    int a[9][9];
     
    int place(int x, int y) //二者分别是数组对应的行地址和列地址,取值为0-8
    {
    int up, down, left, right;
    int i,j;
     
    up=x/3*3;
    down=up+3;
     
    left=y/3*3;
    right=left+3;
     
    //以下分三种情况判断是否在x,y对应的位置放这个数,如果不可以放,返回0,如果可以放,返回1,会进一步迭代
    
    for(i=0;i<9;i++){
    if(a[x][y]==a[i][y] && i!=x && a[i][y]!=0)
    return 0;
    }
     
    for(i=0;i<9;i++){
    if (a[x][y]==a[x][i] && i!=y && a[x][i]!=0)
    return 0;
    }
     
    for(i=up;i<down;i++)
    {
    for(j=left;j<right;j++)
    if(i!=x || j!=y)
    {
    if(a[i][j]==a[x][y] && a[i][j]!=0)
    return 0;
    }
    }
     
    return 1;
    }
     
     
    void backtrack(int t)
    {
    int i,j;
    int x,y;
     
    if(t==81)
    {
    printf("
    =============================
    ");
    for(i=0;i<9;i++)
    {
    for(j=0;j<9;j++)
    printf("%d",a[i][j]);
     
    putchar('
    ');
    }
    }
    else
    {
    x=t/9;
    y=t%9; //将这个转换为相应的数组行坐标和列坐标
     
    if(a[x][y]!=0)
    {
    backtrack(t+1);
    }
    else
    {
    for(i=1;i<10;i++)
    {
    a[x][y]=i;
    if(place(x,y)==1)
    backtrack(t+1);
    a[x][y]=0;
    }
    }
    }
    }
     
    int main()
    {
    char str[9][9];
    int i,j;
     
    for(i=0;i<9;i++)
    gets(str[i]);
     
    for(i=0;i<9;i++)
    for(j=0;j<9;j++)
    a[i][j]=str[i][j]-'0';
    
    backtrack(0);
     
    return 0;
     
    }

  • 相关阅读:
    C#Ref和Out作用于引用对象时的理解
    Docker-.Net Core部署
    微服务-基于Grpc的进程通信-Protobuf-net.Grpc(4-3)
    微服务-基于Grpc的进程通信-Grpc服务注册与发现 (4-2)
    微服务-基于Grpc的进程通信-简单使用(4-1)
    ELK-Windows下系统安装(1)
    Visual Studio 2019中如何使用Git
    VS2019下载速度快完成时突然变得极慢
    Swagger 发布服务器导出Excel失败,本地导出没问题
    发布到服务器后导出Excel失败
  • 原文地址:https://www.cnblogs.com/yxc123/p/12620478.html
Copyright © 2011-2022 走看看