首页 > 其他 > 详细

DFS 9*9规模数独

时间:2020-03-17 22:24:42      阅读:76      评论:0      收藏:0      [点我收藏+]

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)

 

DFS 9*9规模数独

原文:https://www.cnblogs.com/jcahsy/p/12513942.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!