1、char choice; /void chushi(); /用于初始化void input(int a,int b,int c); /用于输入数据void xuan(); /用于判断是否继续输入void display1(); /用于显示题目void display2(); /用于显示void realdisplay(); /用于显示答案void ji(int a,int b,int c); /用于计算解题void failfind(); /用于无解void putin();void main() while (1) system(cls); cout nnnn;tt 数独系统 ntt=nnt
2、t 【1】初始化系统 ntt 【2】按要求输入题目 ntt 【3】显示题目 ntt 【4】显示答案 nntt 【0】退出本系统 nnt注:每次输入题目前 需初始化系统 显示过答案后 题目显示会出错nntt请选择: flush; choice = getch(); system( switch(choice) case 1: chushi();/用于初始化 break;2 putin(); /input();/用于输入数据3 display1();/用于显示题目4 display2();/显示答案0 exit(0); void chushi()/初始化数据 for(i=0;i9;i+) for(
3、j=0;jj+) NUMij=0; for(k=0;k10;k+) numij.qk=k; /标记前项位置 if(j!=0) numij.H = i; numij.L = j-1; else numij.H = i-1; numij.L = 8;void putin() int a,b; cout依次输入已知项 0代表空n/* NUM00=5;NUM01=0;NUM02=0; NUM03=0;NUM04=0;NUM05=0; NUM06=3;NUM07=0;NUM08=0; NUM10=0;NUM11=9;NUM12=0; NUM13=5;NUM14=0;NUM15=0; NUM16=4;NU
4、M17=0;NUM18=0; NUM20=0;NUM21=0;NUM22=4; NUM23=0;NUM24=0;NUM25=0; NUM26=7;NUM27=0;NUM28=0; NUM30=0;NUM31=5;NUM32=1; NUM33=0;NUM34=3;NUM35=7; NUM36=2;NUM37=8;NUM38=9; NUM40=3;NUM41=0;NUM42=2; NUM43=0;NUM44=8;NUM45=0; NUM46=6;NUM47=0;NUM48=4; NUM50=0;NUM51=0;NUM52=8; NUM53=0;NUM54=5;NUM55=2; NUM56=1;NU
5、M57=3;NUM58=7; NUM60=0;NUM61=3;NUM62=5; NUM63=0;NUM64=0;NUM65=0; NUM66=9;NUM67=0;NUM68=0; NUM70=6;NUM71=0;NUM72=9; NUM73=0;NUM74=0;NUM75=0; NUM76=8;NUM77=2;NUM78=3; NUM80=0;NUM81=8;NUM82=0; NUM83=0;NUM84=2;NUM85=3; NUM86=0;NUM87=0;NUM88=6; display1();*/*测试用的题目*/ /* *测试题答案: * *5 1 6 2 7 4 3 9 8* *7 9
6、 3 5 6 8 4 1 2* *8 2 4 3 9 1 7 6 5* * * *4 5 1 6 3 7 2 8 9* *3 7 2 1 8 9 6 5 4* *9 6 8 4 5 2 1 3 7* *2 3 5 8 4 6 9 7 1* *6 4 9 7 1 5 8 2 3* *1 8 7 9 2 3 5 4 6* */ for(a=0;aa+) for(b=0;bNUMab; if(NUMab! input(a,b,NUMab);void input(int aa,int bb,int cc)/输入已知项 int a,b,c,temp; h=aa+1;l=bb+1;temp=cc;a=l;
7、 numh-1l-1.q0 = temp; /排除干扰数据 for(i=1; numh-1l-1.qi=0; numh-1i.qtemp=0; numil-1.qtemp=0; /记录已知项的后一项的位置 if(l != 9) b=h-1; c=l; else b=h; c=0; /重新标记已知项后一项的标记 for(i=h-1;i=0;i-) for(j=a-1;jj-) if(numij.q0 = 0) numbc.H = i; numbc.L = j; temp = 0; if(temp = 0) break; a=9;void display1()/用于显示题目 for(k=0; co
8、utNUMik; if(k+1)%3=0) cout| coutn if(i+1)%3=0) /*coutcouti+)/用于查看数据numik.q0(numik.H ,numik.L ) */flush; getch();void display2() ji(0,0,1);void realdisplay() /用于显示答案numij.q0; if(j+1)%3=0)| main();void ji(int a,int b,int c) int temp1=b,temp2=c,sign=0; int nineh,ninel,ninei,ninej;/记录九宫格的行列、循环 for(i=a;
9、for(j=temp1; if(numij.q0 = 0)/循环判断出该位是否有数字 for(k=temp2; if(numij.qk != 0) numij.q0 = k;sign=1; for(z=0;zz+) if(numij.q0 = numiz.q0 & z!=j)/与同列比较 k=k+1 ; numij.q0 = 0;sign=0; ji(i,j,k); if( z!=i & numij.q0 = numzj.q0)/与同行比较 nineh = i-(i%3);ninel = j-(j%3);/获取该九宫格第一个空格的坐标 for(ninei=0;ninei3;ninei+)/用于
10、判断九宫格内 for(ninej=0;ninejninej+) if(numnineh+nineininel+ninej.q0 = numij.q0 & nineh+ninei != i & ninel+ninej !=j) k=k+1 ; numij.q0 = 0; ji(i,j,k); break; if(sign=1) if(j!=8) ji(i,j+1,1); else ji(i+1,0,1); /回到前项空格计算 if(numij.H 0) failfind();/无解 k = numnumij.Hnumij.L.q0+1; numnumij.Hnumij.L.q0 = 0; ji(numij.H ,numij.L ,k); temp2=1; temp1 = 0;temp2=1; realdisplay();void failfind()无解截图:菜单:输入: 显示题目:显示答案:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1