码迷,mamicode.com
首页 > 其他好文 > 详细

个人项目:数独

时间:2018-04-21 17:42:34      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:http   打开文件   图片   第一个   strong   planning   文件路径   很多   https   

 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(‘\n‘,fp3);
    }   // 文件的保存

 

       

        

 

个人项目:数独

标签:http   打开文件   图片   第一个   strong   planning   文件路径   很多   https   

原文地址:https://www.cnblogs.com/mmm3/p/8901980.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!