求助大佬,0分求调
  • 板块P1784 数独
  • 楼主CharlieLee
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/1 16:11
  • 上次更新2023/10/27 09:20:58
查看原帖
求助大佬,0分求调
745235
CharlieLee楼主2022/10/1 16:11
 #include<bits/stdc++.h>
 using namespace std;
 const int n=9;
 int a[10][10];
 int id[10][10]{{},
 {0,1,1,1,2,2,2,3,3,3},
 {0,1,1,1,2,2,2,3,3,3},
 {0,1,1,1,2,2,2,3,3,3},
 {0,4,4,4,5,5,5,6,6,6},
 {0,4,4,4,5,5,5,6,6,6},
 {0,4,4,4,5,5,5,6,6,6},
 {0,7,7,7,8,8,8,9,9,9},
 {0,7,7,7,8,8,8,9,9,9},
 {0,7,7,7,8,8,8,9,9,9}
 };
 bool hang[10][10],lie[10][10],gong[10][10];
 void dfs(int x,int y){
 	if(y==10) x++,y=1;
 	if(x>9){
 	    for(int i=1;i<=9;i++){
 	        for(int j=1;j<=9;j++) cout<<a[i][j]<<' ';
 	        cout<<endl;
 	    }
 	    exit(0);
 	}
 	if(a[x][y]) dfs(x,y+1);
	else{
	    for(int i=1;i<=9;i++){
	        if(hang[x][i]||lie[y][i]||gong[id[x][y]][i]) continue;
	        a[x][y]=i;
	        hang[x][i]=lie[y][i]=gong[id[x][y]][i]=true;
	        dfs(x,y+1);
	        hang[x][i]=lie[y][i]=gong[id[x][y]][i]=false;
	        a[x][y]=0;
	    }
	}
 }
 int main(){
 	for(int i=1;i<=9;i++){
 	    for(int j=1;j<=9;j++){
 	        cin>>a[i][j];
 	        if(a[i][j]) hang[i][a[i][j]]=lie[j][a[i][j]]=hang[id[i][j]][a[i][j]];
 	    }
 	}
 	dfs(1,1); 
 	return 0;
 }

求调

2022/10/1 16:11
加载中...