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)

 

posted on 2020-03-17 22:15  二进制dd  阅读(254)  评论(0编辑  收藏  举报

导航