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)