软件工程实践2017第二次作业

github:https://github.com/hhhyg/world

首先我们知道,整个大九宫格(九九八十一格)中我们只能填入数字1-9,而我们看到的是横行、竖行和小九宫格都是九格,也就是说,我们在横行、竖行和小九宫格都必须使用到这九个数字。

解题思路1:

若我们要生成一组数独完全解,那如果按传统的回溯方法来产生,那我们首先会从第一个方格(从左至右,从上至下)开始,先从1-9九个数字中选取一个数字填入该处,然后我们再从第二个方格开始,选取八个数字(按数独规则不能重复,则要除去刚刚填入的一个数字)中的一个,依此下去选填数字……当然后续方格中选择的数字,都会因为数独规则,使其所在横行、竖行和小九宫格中,其他已填方格中的数字对该处可填入的数字产生不同的条件约束。某种情况下,我们可能发现填到某格时,由于数独规则约束我们已经没有数字可以填入该处了,这时候我们就要开始回溯了,撤销上一步填入的数字,重新选择一个数字填入上一步的方格,然后继续开始本次的填数,若不行还得继续回溯。有时会因为某种制约,导致我们要不停回溯撤销重填.

思路2:

数独有九个九宫格,先填其中一个九宫格,按题目要求,先填第一个九宫格。因为左上角第一个固定,所有8!=40320种变换,通过交叉变换方法,能每个1~9排列能生成25种不同数独,所以满足n<=1000000。
因为没有学过用c'c++写随机数所以我就选择了第二种思路。

int main()
{
int i;
int a[9];
srand ( time(NULL));
for (i=0;i<9;i++)
{
a[i]=rand()%10;
printf("%d ",a[i]);

 } 
 i=rand()%10;
 printf("\n%d\n",a[i]);
 return 0;

}这是上网查得随机数的代码,暂时还看不懂srand等作用所以就没用思路1
这是在命令行中运行结果

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 400 660
· Estimate · 估计这个任务需要多少时间 500 1000
Development 开发 400 800
· Analysis · 需求分析 (包括学习新技术) 55 110
· Design Spec · 生成设计文档 45 0
· Design Review · 设计复审 (和同事审核设计文档) 40 0
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 40
· Design · 具体设计 20 50
· Coding · 具体编码 0 0
· Code Review · 代码复审 60 30
· Test · 测试(自我测试,修改代码,提交修改) 60 100
Reporting 报告 60 90
· Test Report · 测试报告 10 0
· Size Measurement · 计算工作量 20 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 40 20
合计
posted @ 2017-09-10 21:11  piep  阅读(181)  评论(1编辑  收藏  举报