请问我的sudoku有什么可以优化的???在本第一个稍微复杂的用例挂20分钟都出不来
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool over2=false;
int g[9][9][2]={
{{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2}},
{{0+3,0},{0+3,1},{0+3,2},{1+3,0},{1+3,1},{1+3,2},{2+3,0},{2+3,1},{2+3,2}},
{{0+6,0},{0+6,1},{0+6,2},{1+6,0},{1+6,1},{1+6,2},{2+6,0},{2+6,1},{2+6,2}},
{{0,0+3},{0,1+3},{0,2+3},{1,0+3},{1,1+3},{1,2+3},{2,0+3},{2,1+3},{2,2+3}},
{{0,0+6},{0,1+6},{0,2+6},{1,0+6},{1,1+6},{1,2+6},{2,0+6},{2,1+6},{2,2+6}},
{{0+6,0+6},{0+6,1+6},{0+6,2+6},{1+6,0+6},{1+6,1+6},{1+6,2+6},{2+6,0+6},{2+6,1+6},{2+6,2+6}},
{{0+3,0+3},{0+3,1+3},{0+3,2+3},{1+3,0+3},{1+3,1+3},{1+3,2+3},{2+3,0+3},{2+3,1+3},{2+3,2+3}},
{{3,6},{3,7},{3,8},{4,6},{4,7},{4,8},{5,6},{5,7},{5,8}},
{{6,3},{6,4},{6,5},{7,3},{7,4},{7,5},{8,3},{8,4},{8,5}}
};
bool over(int c[9][9]){
int d[10];
for(int i = 0;i < 9;i++){
memset(d,0,sizeof(d));
for(int j = 0;j < 9;j++){
d[c[i][j]]+=1;
}
for(int i = 1;i <= 9;i++){
if(d[i]!=1) return false;
}
}//横向
for(int i = 0;i < 9;i++){
memset(d,0,sizeof(d));
for(int j = 0;j < 9;j++){
d[c[j][i]]+=1;
}
for(int i = 1;i <= 9;i++){
if(d[i]!=1) return false;
}
}//竖向
for(int i = 0;i < 9;i++){
memset(d,0,sizeof(d));
for(int j = 0;j < 9;j++){
d[c[g[i][j][0]][g[i][j][1]]]+=1;
}
for(int i = 1;i <= 9;i++){
if(d[i]!=1) return false;
}
}//宫格
return true;
}
bool em(int c[9][9]){
for(int i = 0;i < 9;i++){
for(int j = 0;j <9;j++){
if(c[i][j]==0) return false;
}
}
return true;
}
void dfs(int gz[9][9]){
int cp[9][9];
if(over2) return;
if(over(gz)){
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
cout<<gz[i][j]<<" ";
}
cout<<endl;
}
over2=true;
}else if(!em(gz)){
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
if(gz[i][j]==0){
for(int m = 1;m <=9;m++){
for(int k = 0;k < 9;k++){
for(int l=0;l<9;l++){
cp[k][l]=gz[k][l];
}
}
cp[i][j]=m;
dfs(cp);
}
}
}
}
}
}
int main(){
int b[9][9];
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
cin>>b[i][j];
}
}
cout<<"Anser is:"<<endl;
dfs(b);
return 0;
}
0 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 0 4 5 2 7 6 8 3 1
这个用例可以过