数独解题系统Word格式文档下载.docx

上传人:b****5 文档编号:20783535 上传时间:2023-01-25 格式:DOCX 页数:13 大小:31.82KB
下载 相关 举报
数独解题系统Word格式文档下载.docx_第1页
第1页 / 共13页
数独解题系统Word格式文档下载.docx_第2页
第2页 / 共13页
数独解题系统Word格式文档下载.docx_第3页
第3页 / 共13页
数独解题系统Word格式文档下载.docx_第4页
第4页 / 共13页
数独解题系统Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数独解题系统Word格式文档下载.docx

《数独解题系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数独解题系统Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

数独解题系统Word格式文档下载.docx

charchoice;

//

voidchushi();

//用于初始化

voidinput(inta,intb,intc);

//用于输入数据

voidxuan();

//用于判断是否继续输入

voiddisplay1();

//用于显示题目

voiddisplay2();

//用于显示

voidrealdisplay();

//用于显示答案

voidji(inta,intb,intc);

//用于计算解题

voidfailfind();

//用于无解

voidputin();

voidmain()

while

(1)

{

system("

cls"

);

cout<

<

"

\n\n\n\n"

;

\t\t数独系统\n"

\t\t======================================"

\n\n"

\t\t【1】初始化系统\n"

\t\t【2】按要求输入题目\n"

\t\t【3】显示题目\n"

\t\t【4】显示答案\n"

"

\n"

\t\t【0】退出本系统\n"

\n\t注:

每次输入题目前需初始化系统显示过答案后题目显示会出错\n\n"

\t\t请选择:

<

flush;

choice=getch();

system("

switch(choice)

{

case'

1'

:

chushi();

//用于初始化

break;

2'

putin();

//input();

//用于输入数据

3'

display1();

//用于显示题目

4'

display2();

//显示答案

0'

exit(0);

}

}

}

voidchushi()//初始化数据

for(i=0;

i<

9;

i++)

for(j=0;

j<

j++)

NUM[i][j]=0;

for(k=0;

k<

10;

k++)

{

num[i][j].q[k]=k;

}

//标记前项位置

if(j!

=0)

num[i][j].H=i;

num[i][j].L=j-1;

else

num[i][j].H=i-1;

num[i][j].L=8;

voidputin()

inta,b;

cout<

依次输入已知项0代表空\n"

/*NUM[0][0]=5;

NUM[0][1]=0;

NUM[0][2]=0;

NUM[0][3]=0;

NUM[0][4]=0;

NUM[0][5]=0;

NUM[0][6]=3;

NUM[0][7]=0;

NUM[0][8]=0;

NUM[1][0]=0;

NUM[1][1]=9;

NUM[1][2]=0;

NUM[1][3]=5;

NUM[1][4]=0;

NUM[1][5]=0;

NUM[1][6]=4;

NUM[1][7]=0;

NUM[1][8]=0;

NUM[2][0]=0;

NUM[2][1]=0;

NUM[2][2]=4;

NUM[2][3]=0;

NUM[2][4]=0;

NUM[2][5]=0;

NUM[2][6]=7;

NUM[2][7]=0;

NUM[2][8]=0;

NUM[3][0]=0;

NUM[3][1]=5;

NUM[3][2]=1;

NUM[3][3]=0;

NUM[3][4]=3;

NUM[3][5]=7;

NUM[3][6]=2;

NUM[3][7]=8;

NUM[3][8]=9;

NUM[4][0]=3;

NUM[4][1]=0;

NUM[4][2]=2;

NUM[4][3]=0;

NUM[4][4]=8;

NUM[4][5]=0;

NUM[4][6]=6;

NUM[4][7]=0;

NUM[4][8]=4;

NUM[5][0]=0;

NUM[5][1]=0;

NUM[5][2]=8;

NUM[5][3]=0;

NUM[5][4]=5;

NUM[5][5]=2;

NUM[5][6]=1;

NUM[5][7]=3;

NUM[5][8]=7;

NUM[6][0]=0;

NUM[6][1]=3;

NUM[6][2]=5;

NUM[6][3]=0;

NUM[6][4]=0;

NUM[6][5]=0;

NUM[6][6]=9;

NUM[6][7]=0;

NUM[6][8]=0;

NUM[7][0]=6;

NUM[7][1]=0;

NUM[7][2]=9;

NUM[7][3]=0;

NUM[7][4]=0;

NUM[7][5]=0;

NUM[7][6]=8;

NUM[7][7]=2;

NUM[7][8]=3;

NUM[8][0]=0;

NUM[8][1]=8;

NUM[8][2]=0;

NUM[8][3]=0;

NUM[8][4]=2;

NUM[8][5]=3;

NUM[8][6]=0;

NUM[8][7]=0;

NUM[8][8]=6;

display1();

*//*测试用的题目*/

/********************

*测试题答案:

*

*516274398*

*793568412*

*824391765*

**

*451637289*

*372189654*

*968452137*

*235846971*

*649715823*

*187923546*

********************/

for(a=0;

a<

a++)

for(b=0;

b<

b++)

cin>

>

NUM[a][b];

if(NUM[a][b]!

input(a,b,NUM[a][b]);

voidinput(intaa,intbb,intcc)//输入已知项

inta,b,c,temp;

h=aa+1;

l=bb+1;

temp=cc;

a=l;

num[h-1][l-1].q[0]=temp;

//排除干扰数据

for(i=1;

num[h-1][l-1].q[i]=0;

num[h-1][i].q[temp]=0;

num[i][l-1].q[temp]=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;

j>

j--)

if(num[i][j].q[0]==0)

num[b][c].H=i;

num[b][c].L=j;

temp=0;

if(temp==0)

{break;

a=9;

voiddisplay1()//用于显示题目

for(k=0;

cout<

NUM[i][k];

if((k+1)%3==0)

{cout<

'

|'

cout<

\n'

if((i+1)%3==0)

/*cout<

cout<

i++)//用于查看数据

num[i][k].q[0]<

("

num[i][k].H<

"

num[i][k].L<

)"

}*/

flush;

getch();

voiddisplay2()

ji(0,0,1);

voidrealdisplay()//用于显示答案

num[i][j].q[0];

if((j+1)%3==0)

|"

main();

voidji(inta,intb,intc)

inttemp1=b,temp2=c,sign=0;

intnineh,ninel,ninei,ninej;

//记录九宫格的行列、循环

for(i=a;

for(j=temp1;

if(num[i][j].q[0]==0)//循环判断出该位是否有数字

for(k=temp2;

{

if(num[i][j].q[k]!

=0)

{

num[i][j].q[0]=k;

sign=1;

for(z=0;

z<

z++)

{

if(num[i][j].q[0]==num[i][z].q[0]&

&

z!

=j)//与同列比较

{

k=k+1;

num[i][j].q[0]=0;

sign=0;

ji(i,j,k);

}

if(z!

=i&

num[i][j].q[0]==num[z][j].q[0])//与同行比较

nineh=i-(i%3);

ninel=j-(j%3);

//获取该九宫格第一个空格的坐标

for(ninei=0;

ninei<

3;

ninei++)//用于判断九宫格内

for(ninej=0;

ninej<

ninej++)

{

if(num[nineh+ninei][ninel+ninej].q[0]==num[i][j].q[0]&

nineh+ninei!

=i&

ninel+ninej!

=j)

{

k=k+1;

num[i][j].q[0]=0;

ji(i,j,k);

}

}

}

break;

}

}

if(sign==1)

if(j!

=8)

{ji(i,j+1,1);

else

{ji(i+1,0,1);

//回到前项空格计算

if(num[i][j].H<

0)

{failfind();

}//无解

k=num[num[i][j].H][num[i][j].L].q[0]+1;

num[num[i][j].H][num[i][j].L].q[0]=0;

ji(num[i][j].H,num[i][j].L,k);

temp2=1;

temp1=0;

temp2=1;

realdisplay();

voidfailfind()

无解"

截图:

菜单:

输入:

显示题目:

显示答案:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1