1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include<bits/stdc++.h> using namespace std; #define MAXN 10+1 #define INF 0x3f3f3f #define file(a) freopen("j"a".in","r",stdin),freopen("j"a".ans","w",stdout)
int read() { int x=0,f=1; char ch=getchar(); while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();} return x*f; }
int a[MAXN][MAXN],line[MAXN][MAXN],rall[MAXN][MAXN],box[MAXN][MAXN];
int mark(int x,int y){ int u=ceil(x*1.0/3),v=ceil(y*1.0/3); return (u-1)*3+v; }
bool found=0;
void print() { for(int i=1; i<=9; i++){ for(int j=1; j<=9; j++) cout<<a[i][j]<<" "; cout<<endl; } }
void dfs(int x,int y) { if(x==10) y++,x=1; if(y==10&&x==1){ print(); found=1; return ; } if(a[x][y]){ dfs(x+1,y); return ; } int q=mark(x,y); for(int i=1;i<=9;i++){ if(!line[x][i]&&!rall[y][i]&&!box[q][i]){ line[x][i]=1,rall[y][i]=1,box[q][i]=1,a[x][y]=i; dfs(x+1,y); line[x][i]=0,rall[y][i]=0,box[q][i]=0,a[x][y]=0; } } }
int main() {
for(int i=1; i<=9; i++) for(int j=1; j<=9; j++) { a[i][j]=read(); if(a[i][j]!=0) { line[i][a[i][j]]=1; rall[j][a[i][j]]=1; box[mark(i,j)][a[i][j]]=1; } } dfs(1,1); return 0; }
|