第二次作业------个人项目战:数独
2017-09-10 21:57 麦哈狼 阅读(355) 评论(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 | 学会博客写作规范,体会了自己找资料,写代码的过程 |