数独c++解法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}Baidu Nhomakorabea
is++;
}
else{
int i;
int x,y,z;
x=s[t]/9;
y=s[t]%9;
z=x/3*3+y/3;
for(i=1;i<10;i++){
A[x][y]=i;
if(row[x][i]==0&&col[y][i]==0&&p[z][i]==0){
row[x][i]=1;
col[y][i]=1;
int is=0;
void backtrak(int t){//回溯法解数独遍历
if(t>C){
int i,j;
if(is<10){
for(i=0;i<9;i++){
for(j=0;j<9;j++)
cout<<A[i][j]<<",";
cout<<endl;
}
cout<<"*******************"<<endl;
p[z][i]=1;
backtrak(t+1);
row[x][i]=0;
col[y][i]=0;
p[z][i]=0;
}
}
}
}
int main()
{
int i,j;
int a;
for(i=0;i<9;i++)//输入数独矩阵,空白的地方用0代替,按行依次从左到右输入
for(j=0;j<9;j++){
cin>>a;
#include <iostream>
using namespace std;
int A[9][9]={0};
int C=0;
int s[81]={0};//标记未填写的空格
int row[9][10]={0};//行检测
int col[9][10]={0};//列检测
int p[9][10]={0};//块检测
row[i][a]=1;
col[j][a]=1;
p[i/3*3+j/3][a]=1;
if(a==0)
s[++C]=i*9+j;
A[i][j]=a;
}
backtrak(1);
cout<<"解法"<<is<<"种";
return 0;
}
is++;
}
else{
int i;
int x,y,z;
x=s[t]/9;
y=s[t]%9;
z=x/3*3+y/3;
for(i=1;i<10;i++){
A[x][y]=i;
if(row[x][i]==0&&col[y][i]==0&&p[z][i]==0){
row[x][i]=1;
col[y][i]=1;
int is=0;
void backtrak(int t){//回溯法解数独遍历
if(t>C){
int i,j;
if(is<10){
for(i=0;i<9;i++){
for(j=0;j<9;j++)
cout<<A[i][j]<<",";
cout<<endl;
}
cout<<"*******************"<<endl;
p[z][i]=1;
backtrak(t+1);
row[x][i]=0;
col[y][i]=0;
p[z][i]=0;
}
}
}
}
int main()
{
int i,j;
int a;
for(i=0;i<9;i++)//输入数独矩阵,空白的地方用0代替,按行依次从左到右输入
for(j=0;j<9;j++){
cin>>a;
#include <iostream>
using namespace std;
int A[9][9]={0};
int C=0;
int s[81]={0};//标记未填写的空格
int row[9][10]={0};//行检测
int col[9][10]={0};//列检测
int p[9][10]={0};//块检测
row[i][a]=1;
col[j][a]=1;
p[i/3*3+j/3][a]=1;
if(a==0)
s[++C]=i*9+j;
A[i][j]=a;
}
backtrak(1);
cout<<"解法"<<is<<"种";
return 0;
}