zoukankan      html  css  js  c++  java
  • 个人项目:数独

     1.GitHub地址:https://github.com/meiminmin/shuduku

    2.PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 30 30
    Estimate 估计这个任务需要多少时间 30 30
    Development 开发 900 900
    Analysis 需求分析(包括学习新技术) 120 120
    Design Spec 生成设计文档 120 120
    Design Review 设计复审 30 30
    Coding Standard 代码规范 30 30
    Design 具体设计 240 240
    Coding 具体编码 600 600
    Code Review 代码复审 30 30
    Test 测试 30 30
    Reporting 报告 90 90
    Test Report 测试报告 30 30
    Size Measurement 计算工作量 15 15

    Postmortem&Process Improvement Plan

    事后总结并提出过程改进计划 45 45
      合计 2340 2340

    3. 解题思路描述:该项目的难点在于:文件的读取和输出,命令行,生成不重复终局,解数独四个部分。

        (1):文件的读取和输出:在这个项目之前还没接触过文件的读取和输出。所以问了很多大佬以及百度很多资料后终于学会了文件的读取和输出。注意一点:exe要和文件保存在同一个目录下。

        (2): 命令行:需要注意的是:int main(int argc, char * argv[]),在cmd输入的时候要判断是c还是s。如果是c要完成的任务是生成c个数独;如果是s要完成的任务是解数独。

        (3):生成不重复数独终局:学号尾号24%9+1=7,所以左上角的第一个数是7。于是先写了一个数独终局:

           7 8 9 1 2 3 4 5 6

           1 2 3 4 5 6 7 8 9

           4 5 6 7 8 9 1 2 3

           8 9 1 2 3 4 5 6 7

           2 3 4 5 6 7 8 9 1

           5 6 7 8 9 1 2 3 4

      

           9 1 2 3 4 5 6 7 8

           3 4 5 6 7 8 9 1 2

           6 7 8 9 1 2 3 4 5

         后8行都可以看做根据第一行左移得到,第一行全排列有8!=40320种,然后交换2-3(因为数据只要求1e6,可以不 考虑),4-6,7-9行,再乘3!×3!,结果略大于1e6。

       (4)解数独:主要思路是用dfs暴力搜索完成。

    4.设计实现过程:

      (1)代码结构:

            

         (2)关键函数:

                 <1>.解数独:int jsd(int arr[9][9], int row, int col) :不断判定行、列、所在小九宫格是否重复。

                 <2>.生成数独终局:void generate1to9() :产生9个随机数。数独左上角第一个数是24%9+1=7

                                                 void generator():生成不重复的数独终局。

        (3)单元测试:

                 命令行参数判定:-c,  -s,  -abc

         运行情况判定:-c 1,  -c 10000,  -c  1000000,  -s 文件路径(其中包含1、10000、1000000个用例)

       (4)运行分析:从图中可知,打开文件和保存文件占据的时间最多。

               (1)生成1000个数独终局:

                

              

            (2)解1000个20-40个空格的数独

                

               

    5. 代码说明:

            if(argc>1) :当输入的argc>1时才可以运行代码。(这是个坑点,坑了我好久,一直不知道哪里出错了。)

            if(argv[1][1]=='s')  当输入s时,要解数独。

            else if(argv[1][1]=='c') 当输入是c时,要生成c个数独,并且保存。

            for (e = 0; e < 9;e++)

        {  
              for (f = 0; f < 9; f++)

              {  
                 fputc(num[e][f]+'0',fp3);
                 if(f!=8)  fputc(' ',fp3);
                }
                 fputc(' ',fp3);
        }   // 文件的保存

           

            

  • 相关阅读:
    第十一周作业
    第十周作业
    第九周编程
    第十二周作业
    第十一周作业
    第十周作业
    第八周作业
    第七周作业
    第五周作业
    2019春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/mmm3/p/8901980.html
Copyright © 2011-2022 走看看