2019软工第三次作业

软工第三次作业

github项目地址

https://github.com/CDCDA/001.git

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 0.5h 1h
Estimate 估计这个任务需要多少时间 15h 20.8h
Development 开发 3h 4h
Analysis 需求分析(包括学习新技术) 2h 4h
Design Spec 生成设计文档 0.5h 0.4h
Design Review 设计复审 0.5h 0.2
Coding Standard 代码规范 (为目前的开发制定合适的规范) 0.1h 0.1h
Design 具体设计 0.5h 0.6h
Coding 具体编码 3h 3.5h
Code Review 代码复审 1h 2h
Test 测试(自我测试,修改代码,提交修改) 2h 3h
Reporting 报告 0.1h 0.2h
Test Repor 测试报告 0.1h 0.1h
Size Measurement 计算工作量 1.2h 1.5h
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 0.5h 0.2h
合计 15h 20.8h

设计思路

看到题目第一反应就是先把代码写了,其他的附加要求我都先扔在了一边。
数独的要求是每一行,每一列和每一宫的合法不重复,于是我写了一个函数来分析数独数字的合理性,由于数独的格数种类不多,我选择直接穷举。另一点就每一个数字都需要验证,我想到了以前用过的回溯法,利用深度搜索寻找数独的解。
求解函数如下
bool rightSudoku(int num,int m)//判断数字
{
    int a,b,i,j,row,col;
    row=num/m;col=num%m;
    for(i=0;i
验证代码后才发现这些附加要求才是最麻烦的,以前我并没有接触过这类操作,只能求助于百度学习主函数引入参数和文件流,但是当时两眼一抹黑着实花费很长的时间。
按照作业要求,argv[2][4][6][8]即是我们想要的参数,再使用文件流输入输出即可。
    int n, m, i, j;
    char c;
    int a[10][10];
    ifstream infile;
        ofstream outfile;
    for(i=0;i<8;i++)
    { 
        if(argv[i][1]=='m')
        m = atoi(argv[i+1]);
            if(argv[i][1]=='n')
            n = atoi(argv[i+1]);
            if(argv[i][1]=='i')
            {
        infile.open(argv[i+1]);
            if (!infile.is_open())
            cout << "打开输入文件错误" << endl;
            }
            if(aggv[i][1]=='o')
            {    
            outfile.open(argv[i+1]);
            if (!infile.is_open())
            cout << "打开输出文件错误" << endl;
        else cout<<"error"< 0; n--)
        {
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < m; j++)
                {
                    infile >> c;
                    a[i][j] = c - 48;
                }
            }
        input(m, a);
        back(0, m);
    }
    infile.close();

结果

检错
2019软工第三次作业_第1张图片
2019软工第三次作业_第2张图片
2019软工第三次作业_第3张图片
2019软工第三次作业_第4张图片

性能分析

2019软工第三次作业_第5张图片
时间不太够,但目前来看对我而言收获还是很大的。

你可能感兴趣的:(2019软工第三次作业)