📄 shudu.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#include <fstream.h>//文件操作(文件流)
void main()
{
ifstream f1;//从文件中读信息(input from file)
ofstream f2;
f2.open("123.txt");
int cc=0;
char tmpbuf[30];
char filename[40];
int temp;
int a[9][9]={ {1,2,3,5,6,4,9,7,8},
{4,5,6,8,9,7,3,1,2},
{7,8,9,2,3,1,6,4,5},
{5,6,4,1,2,3,8,9,7},
{8,9,7,4,5,6,2,3,1},
{2,3,1,7,8,9,5,6,4},
{9,7,8,6,4,5,1,2,3},
{3,1,2,9,7,8,4,5,6},
{6,4,5,3,1,2,7,8,9},
};
int b[9][9];
int c[9][9];
int d[9][9]= /* { {1,2,3,0,0,0,0,0,0},
{4,5,6,0,0,0,0,0,0},
{7,8,9,0,0,0,0,0,0},
{0,0,0,1,2,3,0,0,0},
{0,0,0,4,5,6,0,0,0},
{0,0,0,7,8,9,0,0,0},
{0,0,0,0,0,0,1,2,3},
{0,0,0,0,0,0,4,5,6},
{0,0,0,0,0,0,7,8,9},
};*/{ //{9,8,7,5,6,4,1,2,3},
//{1,2,5,7,8,3,4,9,6},
//{6,4,3,1,2,9,7,5,8},
{1,0,0,0,0,8,0,0,9},
{0,0,0,0,0,0,0,2,7},
{4,7,0,0,0,6,0,0,0},
//{6,4,3,1,2,9,7,5,8},
{8,0,0,9,4,0,6,7,0},
{0,0,0,0,0,1,0,0,0},
{0,4,3,0,5,7,0,0,8},
//{8,6,9,4,1,2,5,3,7},
{0,0,0,1,0,0,0,8,4},
{2,9,0,0,0,0,0,0,0},
{5,0,0,6,0,0,0,0,2},
//{0,0,0,0,0,0,0,0,0},
//{1,2,3,7,8,9,4,5,6},
};
int i,j;
int m;
int t;
char str[12];
int check(int a[9][9]);
int test(int a[9]);
void prn(int a[9][9]);
int choose(int a[9][9],int t1,int t2);
void w(int a[9][9],int c);
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
b[i][j]=1;//loop star number
c[i][j]=9;//loop end number
}
printf("******************************\n");
printf("欢迎使用简易数独生成及求解系统\n");
printf(" --制作人:廖旺胜 2009年3月\n");
printf("******************************\n");
ST:
while(1)
{
printf("请输入你要进行的操作:\n");
printf("**************************\n");
printf("1.系统自动生成数独组合。\n2.按一定的要求生成数独组合。\n3.一个数独问题求解样例。\n4.按您的输入求解数独问题。\n");
printf("0.退出系统。\n");
printf("**************************\n");
scanf("%d",&t);
switch(t)
{
case 0:
{
printf("\n****************************************************************\n");
printf("感谢你的使用,如有问题或建议,请联系:liaowangsheng2008@126.com\n");
printf("****************************************************************\n");
_strtime( tmpbuf );
f2<<"\n退出系统运行时间:"<<tmpbuf<<endl;
exit(0);
};
case 1: goto TT1;
case 2: goto TT2;
case 3: {printf("求解数独:\n");prn(d);printf("求解中……\n");goto TT3;}
case 4: goto TT2;
default :printf("输入错误,请重新选择你要的操作:\n");break;
}
/*prn(a);
if(check(a)) printf("this is a shudu\n");
else printf("this is not a shudu\n");*/
//set the init numbers equeal zero
TT2:
printf("请输入要求:(9*9矩阵,空处用0代替)\n");
printf("请选择你的输入方式:\n");
printf("1.从键盘输入.\n2.从文件输入.\n3.使用默认shudu.txt文件\n");
scanf("%d",&temp);
switch(temp)
{
case 1:
{
printf("请输入:\n");
for(i=0;i<9;i++)
for(j=0;j<9;j++)
scanf("%d",a[i][j]);;
}
case 2:
{
printf("请输入文件名:\n");
scanf("%s",&filename);
f1.open(filename);
for(i=0;i<9;i++)
for(j=0;j<9;j++)
f1>>d[i][j];
f1.close();
}
case 3:
{
f1.open("shudu.txt");
for(i=0;i<9;i++)
for(j=0;j<9;j++)
f1>>d[i][j];
f1.close();
}
}
//printf("从文件 shudu.txt 中读取(如果你是第一次使用请建立文件并输入数据\n");
//f1.open("shudu.txt");
printf("你输入的要求是:\n");
prn(d);
TT3:for(i=0;i<9;i++)
for(j=0;j<9;j++)
a[i][j]=1;
//set some rules
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
if(d[i][j]!=0)
{
b[i][j]=d[i][j];
c[i][j]=d[i][j];
}
}
TT1:
printf("请输入你希望的最大解法数量:\n");
scanf("%d",&m);
_strtime( tmpbuf );
f2<<"系统开始运行时间:"<<tmpbuf<<endl;
//printf("输入c开始求解……\n");
//scanf("%s",&str);
printf("求解中,请稍候……\n");
T11:for(a[0][0]=b[0][0];a[0][0]<=c[0][0];a[0][0]++){
T12:for(a[0][1]=b[0][1];a[0][1]<=c[0][1];a[0][1]++){if(choose(a,0,1)==0) continue;if(a[0][1]==9&&choose(a,0,1)==0){b[0][0]+=1;goto T11;}
T13:for(a[0][2]=b[0][2];a[0][2]<=c[0][2];a[0][2]++){if(choose(a,0,2)==0) continue;if(a[0][2]==9&&choose(a,0,2)==0){b[0][1]+=1;goto T12;}
T14:for(a[0][3]=b[0][3];a[0][3]<=c[0][3];a[0][3]++){if(choose(a,0,3)==0) continue;if(a[0][3]==9&&choose(a,0,3)==0){b[0][2]+=1;goto T13;}
T15:for(a[0][4]=b[0][4];a[0][4]<=c[0][4];a[0][4]++){if(choose(a,0,4)==0) continue;if(a[0][4]==9&&choose(a,0,4)==0){b[0][3]+=1;goto T14;}
T16:for(a[0][5]=b[0][5];a[0][5]<=c[0][5];a[0][5]++){if(choose(a,0,5)==0) continue;if(a[0][5]==9&&choose(a,0,5)==0){b[0][4]+=1;goto T15;}
T17:for(a[0][6]=b[0][6];a[0][6]<=c[0][6];a[0][6]++){if(choose(a,0,6)==0) continue;if(a[0][6]==9&&choose(a,0,6)==0){b[0][5]+=1;goto T16;}
T18:for(a[0][7]=b[0][7];a[0][7]<=c[0][7];a[0][7]++){if(choose(a,0,7)==0) continue;if(a[0][7]==9&&choose(a,0,7)==0){b[0][6]+=1;goto T17;}
T19:for(a[0][8]=b[0][8];a[0][8]<=c[0][8];a[0][8]++){if(choose(a,0,8)==0) continue;if(a[0][8]==9&&choose(a,0,8)==0){b[0][7]+=1;goto T18;}
T21:for(a[1][0]=b[1][0];a[1][0]<=c[1][0];a[1][0]++){if(choose(a,1,0)==0) continue;if(a[1][0]==9&&choose(a,1,0)==0){b[0][8]+=1;goto T19;}
T22:for(a[1][1]=b[1][1];a[1][1]<=c[1][1];a[1][1]++){if(choose(a,1,1)==0) continue;if(a[1][1]==9&&choose(a,1,1)==0){b[1][0]+=1;goto T21;}
T23:for(a[1][2]=b[1][2];a[1][2]<=c[1][2];a[1][2]++){if(choose(a,1,2)==0) continue;if(a[1][2]==9&&choose(a,1,2)==0){b[1][1]+=1;goto T22;}
T24:for(a[1][3]=b[1][3];a[1][3]<=c[1][3];a[1][3]++){if(choose(a,1,3)==0) continue;if(a[1][3]==9&&choose(a,1,3)==0){b[1][2]+=1;goto T23;}
T25:for(a[1][4]=b[1][4];a[1][4]<=c[1][4];a[1][4]++){if(choose(a,1,4)==0) continue;if(a[1][4]==9&&choose(a,1,4)==0){b[1][3]+=1;goto T24;}
T26:for(a[1][5]=b[1][5];a[1][5]<=c[1][5];a[1][5]++){if(choose(a,1,5)==0) continue;if(a[1][5]==9&&choose(a,1,5)==0){b[1][4]+=1;goto T25;}
T27:for(a[1][6]=b[1][6];a[1][6]<=c[1][6];a[1][6]++){if(choose(a,1,6)==0) continue;if(a[1][6]==9&&choose(a,1,6)==0){b[1][5]+=1;goto T26;}
T28:for(a[1][7]=b[1][7];a[1][7]<=c[1][7];a[1][7]++){if(choose(a,1,7)==0) continue;if(a[1][7]==9&&choose(a,1,7)==0){b[1][6]+=1;goto T27;}
T29:for(a[1][8]=b[1][8];a[1][8]<=c[1][8];a[1][8]++){if(choose(a,1,8)==0) continue;if(a[1][8]==9&&choose(a,1,8)==0){b[1][7]+=1;goto T28;}
T31:for(a[2][0]=b[2][0];a[2][0]<=c[2][0];a[2][0]++){if(choose(a,2,0)==0) continue;if(a[2][0]==9&&choose(a,2,0)==0){b[1][8]+=1;goto T29;}
T32:for(a[2][1]=b[2][1];a[2][1]<=c[2][1];a[2][1]++){if(choose(a,2,1)==0) continue;if(a[2][1]==9&&choose(a,2,1)==0){b[2][0]+=1;goto T31;}
T33:for(a[2][2]=b[2][2];a[2][2]<=c[2][2];a[2][2]++){if(choose(a,2,2)==0) continue;if(a[2][2]==9&&choose(a,2,2)==0){b[2][1]+=1;goto T32;}
T34:for(a[2][3]=b[2][3];a[2][3]<=c[2][3];a[2][3]++){if(choose(a,2,3)==0) continue;if(a[2][3]==9&&choose(a,2,3)==0){b[2][2]+=1;goto T33;}
T35:for(a[2][4]=b[2][4];a[2][4]<=c[2][4];a[2][4]++){if(choose(a,2,4)==0) continue;if(a[2][4]==9&&choose(a,2,4)==0){b[2][3]+=1;goto T34;}
T36:for(a[2][5]=b[2][5];a[2][5]<=c[2][5];a[2][5]++){if(choose(a,2,5)==0) continue;if(a[2][5]==9&&choose(a,2,5)==0){b[2][4]+=1;goto T35;}
T37:for(a[2][6]=b[2][6];a[2][6]<=c[2][6];a[2][6]++){if(choose(a,2,6)==0) continue;if(a[2][6]==9&&choose(a,2,6)==0){b[2][5]+=1;goto T36;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -