第二次作业------个人项目战:数独
2017-09-10 21:57 麦哈狼 阅读(369) 评论(2) 收藏 举报项目需求
利用程序随机构造出N个已解答的数独棋盘 。
输入
数独棋盘题目个数N(0<N<=1000000)
输出
随机生成N个不重复的已解答完毕的数独棋盘,并输出到sudoku.txt中,在生成数独矩阵时,左上角的第一个数为:(2+9)%9+1=3。
遇到的困难及解决方法
困难描述
一看到题目,整个人都不好了,发呆了几分钟之后接受了这个事实,开始想怎么做,可是一点思路都没有,不知从何下手。
做过哪些尝试
之后百度了解了数独的规则和解题方法,也看了一些解数独的算法,结合这次题目想了一个方法。
是否解决
怎么说呢,解决了一部分,没有全部解决
有何收获
解题思路
在百度上看了一些解数独的算法之后,有了一个思路。数独左上方第一个固定为3,接下来的每个格子随机用1~9去尝试,然后验证每行、每列、每个九宫格是否有重复的数字,直到每行、每列、每个九宫格都没有重复的数字。
关键代码or设计说明
整个代码,主要包括三个函数check、output和DFS,check函数用于检查每行、每列、每个九宫格是否有重复的数字,DFS函数用于产生每个九宫格的数字,output函数用来输出并将数独终盘打入文件。
贴出你认为的关键代码或者设计图,并进行解释
产生每个九宫格的数字
for (int i = 1; i <=9; i++)
        {
            /* 满足条件时填入数字 */
            if (Check(n, i) == true)
            {
            	 num[n/9][n%9] = i;
                /* 继续搜索 */
                DFS(n+1);
                /* 返回时如果构造成功,则直接退出 */
                if (sign == true) return 0;
                /* 如果构造不成功,还原当前位 */
                num[n/9][n%9] = 0;
            }
        }
检查每行、每列、每个九宫格是否有重复的数字
bool Check(int n, int key)
{
    /* 判断n所在横列是否合法 */
    for (int i = 0; i < 9; i++)
    {
        /* j为n竖坐标 */
        int j = n / 9;
        if (num[j][i] == key) return false;
    }
 
    /* 判断n所在竖列是否合法 */
    for (int i = 0; i < 9; i++)
    {
        /* j为n横坐标 */
        int j = n % 9;
        if (num[i][j] == key) return false;
    }
 
    /* x为n所在的小九宫格左顶点竖坐标 */
    int x = n / 9 / 3 * 3;
 
    /* y为n所在的小九宫格左顶点横坐标 */
    int y = n % 9 / 3 * 3;
 
    /* 判断n所在的小九宫格是否合法 */
    for (int i = x; i < x + 3; i++)
    {
        for (int j = y; j < y + 3; j++)
        {
            if (num[i][j] == key) return false;
        }
    }
 
    /* 全部合法,返回正确 */
    return true;
}
 
运行

困惑:跑出来两个一模一样,改了很久还是没弄好,烦
对于执行力,泛泛而谈的理解
执行力是指有效利用资源、保质保量达成目标的能力,指的是贯彻战略意图,完成预定目标的操作能力。是把企业战略、规划、目标转化成为效益、成果的关键。
--引用自《百度百科》
泛泛而谈 指肤浅的讲出看法。浮于表面,没有深入研究。
--引用自《百度百科》
简单而言,有了想法,而不去做是泛泛而谈,有了想法,就立刻付诸实践就是执行力。
PSP
| PSP2.1 | **Personal Software Process Stages ** | 预估耗时(分钟) | 实际耗时(分钟) | 
| Planning | 计划 | 60 | 120 | 
| · Estimate | · 估计这个任务需要多少时间 | 1440 | 4320 | 
| Development | 开发 | ||
| · Analysis | · 需求分析 (包括学习新技术) | 360 | 1440 | 
| · Design Spec | · 生成设计文档 | 60 | 60 | 
| · Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 | 
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 60 | 
| · Design | ** · 具体设计** | 120 | 1440 | 
| · Coding | ** · 具体编码** | 120 | 1440 | 
| · Code Review | · 代码复审 | 0 | 0 | 
| · Test | · 测试(自我测试,修改代码,提交修改) | 0 | 0 | 
| Reporting | 报告 | 60 | 60 | 
| · Test Report | ** · 测试报告** | 0 | 0 | 
| · Size Measurement | · 计算工作量 | 60 | 60 | 
| · Postmortem & Process Improvement Plan | ** · 事后总结, 并提出过程改进计划** | 60 | 60 | 
| 合计 | ** ** | 2400 | 9060 | 
学习进度条
| 第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 | 
| 0 | 137 | 137 | 72 | 72 | 学会博客写作规范,体会了自己找资料,写代码的过程 | 
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号