DFS 9*9规模数独
9*9的数独求解



#include<cstdio>
#include<iostream>
using namespace std;
char map[15][15];
bool f;
bool visx[15][15],visy[15][15],visnine[15][15];
void dfs(int x,int y){
if(f){
return;
}
if(x==9){
f=true;
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(j!=8){
printf("%c ",map[i][j]);
}else{
printf("%c\n",map[i][j]);
}
}
}
return;
}if(y==9){
dfs(x+1,0);
return;
}if(map[x][y]!='*'){
dfs(x,y+1);
return;
}
for(int i=1;i<=9;i++){
if(!visx[x][i] && !visy[y][i] && !visnine[x/3*3+y/3][i]){
map[x][y]=i-'0'+48;
visx[x][i]=true;
visy[y][i]=true;
visnine[x/3*3+y/3][i]=true;
dfs(x,y+1);
visx[x][i]=false;
visy[y][i]=false;
visnine[x/3*3+y/3][i]=false;
map[x][y]='*';
}
}
}
int main(){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
cin>>map[i][j];
}
}
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(map[i][j] != '*'){
visx[i][map[i][j]-'0']=true;
visy[j][map[i][j]-'0']=true;
visnine[i/3*3+j/3][map[i][j]-'0']=true;
}
}
}
dfs(0,0);
return 0;
}
i的范围Int型1~9,转换为char型 i+'0'
char 0的ASCII为48
int 0等于NULL(ASCII为0)
浙公网安备 33010602011771号