数独这个游戏大家都知道吧:玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3×3)内的数字均含1-9,不重复。
为了更好的区分已填和未填的格子,未填的格子用0表示!!
1.输入
int a[11][11];
int alltheanswer;//所有的解
int wanttheanswer;//期望得到的解数
int main()
{
printf("请输入9*9的数独:\n");
for(int i=1; i<=9; i++)
for(int j=1; j<=9; j++)
scanf("%d",&a[i][j]);
printf("请输入你期望得到的解数:\n");
cin>>wanttheanswer;
}
2.检查每一行是否有重复
bool checkx(int x) {//x为第几行
for(int i=1; i<=9; i++) {
if(a[x][i]==0)
continue;
for(int j=1; j<i; j++)
if(a[x][i]==a[x][j])
return false;
}
return true;
}
3.检查每一列是否有重复
bool checky(int y) { //y为第几列
for(int i=1; i<=9; i++) {
if(a[i][y]==0)
continue;
for(int j=1; j<i; j++)
if(a[i][y]==a[j][y])
return false;
}
return true;
}
4.检查每一个九宫格是否满足条件
bool jggfz(int x,int y) {//辅助判断
for(int i=x; i<x+3; i++) {
for(int j=y; j<y+3; j++) {
if(a[i][j]==0)
continue;
for(int ii=x; ii<i; ii++) {
for(int jj=y; jj<y+3; jj++) {
if(a[i][j]==a[ii][jj])
return false;
}
}
}
}
return true;
}
bool jgg() { //九宫格判断
if(jggfz(1,1)==false)
return false;
if(jggfz(4,1)==false)
return false;
if(jggfz(7,1)==false)
return false;
if(jggfz(1,4)==false)
return false;
if(jggfz(4,4)==false)
return false;
if(jggfz(7,4)==false)
return false;
if(jggfz(1,7)==false)
return false;
if(jggfz(4,7)==false)
retu

这篇博客介绍了一个优化的数独求解程序,通过检查行、列和九宫格的唯一性来验证解决方案,并使用深度优先搜索进行回溯。代码首先读取9x9数独网格,然后按行和列的已知数多少来确定填充顺序,以提高效率。作者提供了两个版本的C++代码,第二个版本通过改进搜索顺序显著提高了运行速度。
&spm=1001.2101.3001.5002&articleId=122854513&d=1&t=3&u=984b5f4b85b744ac9681e2c243a01f87)
3735

被折叠的 条评论
为什么被折叠?



