软工第三次作业

Github的项目地址:https://github.com/luo-sang/031702149.git

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 20
Estimate 估计这个任务需要多少时间 30 40
Development 开发 360 320
Analysis 需求分析 (包括学习新技术) 400 350
Design Spec 生成设计文档 50 40
Design Review 设计复审 20 120
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 80
Design 具体设计 60 100
Coding 具体编码 300 120
Test 测试(自我测试,修改代码,提交修改) 120 540
Reporting 报告 30 60
Test Repor 测试报告 10 30
Size Measurement 计算工作量 10 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 10
合计 1460 1850

解题思路和步骤
解题思路是:就比如三宫格,如果第一格填的是3,那么在那个格的行向和竖向都不能出现3,所以在三的旁边只能填1,2的其中一个,如果填了2,那么在2的旁边的两个格只能填3,以此类推。就是行跟竖向不能出现同一个数。
步骤:总共分成三部分,第一个就是解数独核心算法:回溯法,起到遍历的作用;第二个就是回溯算法里面包含一个函数用来判断数字合法性;第三个就是文件读写操作。
代码

include

using namespace std;const int size=10;
int Have[size];int main()
{
int a,b,c,A[3],B[3],C[3],i;
for(a=123;a<329;a++){
A[0]=a/100;
A[1]=a%100/10;
A[2]=a%10;
if(A[0]&&A[1]&&A[2]){
//如果三个数中有一个0 就不执行后面的,继续for!
for(i=0;i //9个数字1~9
Have[A[0]]=1-Have[A[0]];
Have[A[1]]=1-Have[A[1]];
Have[A[2]]=1-Have[A[2]];
//3 个数字没有相同的
if(Have[A[0]]&&Have[A[1]]&&Have[A[2]]){
b=2a;
B[0]=b/100;
B[1]=b%100/10;
B[2]=b%10;
if(B[0]&&B[1]&&B[2]){
Have[B[0]]=1-Have[B[0]];
Have[B[1]]=1-Have[B[1]];
Have[B[2]]=1-Have[B[2]];
if(Have[B[0]]&&Have[B[1]]&&Have[B[2]]){
c=3
a;
C[0]=c/100;
C[1]=c%100/10;
C[2]=c%10;
if(C[0]&&C[1]&&C[2]){
Have[C[0]]=1-Have[C[0]];
Have[C[1]]=1-Have[C[1]];
Have[C[2]]=1-Have[C[2]];
for(i=1;i if(i==size)cout< }//if c
}
}
}//end if have[A[]]
}//end if A[]
} //for
system("pause");
return 0;
}

测试代码
软工第三次作业_第1张图片

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